DROP VIEW vw_address;
DROP VIEW vw_city;
DROP VIEW vw_country;
DROP VIEW vw_region;
DROP VIEW vw_street;
DROP TYPE bs_address;
DROP TYPE bs_street;
DROP TYPE bs_city;
DROP TYPE bs_region;
DROP TYPE bs_country;
DROP TABLE tn_country CASCADE CONSTRAINTS;
DROP TABLE tn_region CASCADE CONSTRAINTS;
DROP TABLE tn_city CASCADE CONSTRAINTS;
DROP TABLE tn_street CASCADE CONSTRAINTS;
DROP TABLE tn_address CASCADE CONSTRAINTS;
CREATE TABLE tn_country(pkey NUMBER(16) NOT NULL, uniqueid VARCHAR2(5 BYTE) NOT NULL, name VARCHAR2(40 BYTE))
LOGGING
NOCOMPRESS
NOCACHE
MONITORING;
CREATE TABLE tn_region(pkey NUMBER(16) NOT NULL, uniqueid VARCHAR2(10 BYTE) NOT NULL, name VARCHAR2(40 BYTE), fkey_country NUMBER(16))
LOGGING
NOCOMPRESS
NOCACHE
MONITORING;
CREATE TABLE tn_city(pkey NUMBER(16) NOT NULL, name VARCHAR2(40 BYTE) NOT NULL, fkey_region NUMBER(16))
LOGGING
NOCOMPRESS
NOCACHE
MONITORING;
CREATE TABLE tn_street(pkey NUMBER(16) NOT NULL, name VARCHAR2(40 BYTE) NOT NULL, fkey_city NUMBER(16))
LOGGING
NOCOMPRESS
NOCACHE
MONITORING;
CREATE TABLE tn_address(pkey NUMBER(16) NOT NULL, fkey_street NUMBER(16), zipcode VARCHAR2(10 BYTE), house VARCHAR2(10 BYTE),
addition VARCHAR2(40 BYTE), geoquality VARCHAR2(6 BYTE), longitude FLOAT(126), latitude FLOAT(126))
LOGGING
NOCOMPRESS
NOCACHE
MONITORING;
ALTER TABLE tn_country
ADD(CONSTRAINT pkey_country PRIMARY KEY(pkey) ENABLE VALIDATE);
ALTER TABLE tn_region
ADD(CONSTRAINT pkey_region PRIMARY KEY(pkey) ENABLE VALIDATE);
ALTER TABLE tn_city
ADD(CONSTRAINT pkey_city PRIMARY KEY(pkey) ENABLE VALIDATE);
ALTER TABLE tn_street
ADD(CONSTRAINT pkey_street PRIMARY KEY(pkey) ENABLE VALIDATE);
ALTER TABLE tn_address
ADD(CONSTRAINT pkey_address PRIMARY KEY(pkey) ENABLE VALIDATE);
ALTER TABLE tn_region
ADD(CONSTRAINT fkey_region_country FOREIGN KEY(fkey_country) REFERENCES tn_country (pkey) ENABLE VALIDATE);
ALTER TABLE tn_city
ADD(CONSTRAINT fkey_city_country FOREIGN KEY(fkey_region) REFERENCES tn_region (pkey) ENABLE VALIDATE);
ALTER TABLE tn_street
ADD(CONSTRAINT fkey_street_city FOREIGN KEY(fkey_city) REFERENCES tn_city (pkey) ENABLE VALIDATE);
ALTER TABLE tn_address
ADD(CONSTRAINT fkey_addrebs_street FOREIGN KEY(fkey_street) REFERENCES tn_street (pkey) ENABLE VALIDATE);
CREATE OR REPLACE TYPE bs_country AS OBJECT(pkey NUMBER(16), uniqueid VARCHAR2(5), name VARCHAR2(40));
/
CREATE OR REPLACE TYPE bs_region AS OBJECT(pkey NUMBER(16), uniqueid VARCHAR2(5), name VARCHAR2(40), country REF bs_country);
/
CREATE OR REPLACE TYPE bs_city AS OBJECT(pkey NUMBER(16), name VARCHAR2(40), region REF bs_region);
/
CREATE OR REPLACE TYPE bs_street AS OBJECT(pkey NUMBER(16), name VARCHAR2(40), city REF bs_city);
/
CREATE OR REPLACE TYPE bs_address AS OBJECT(pkey NUMBER, street REF bs_street, zipcode VARCHAR2(10), house VARCHAR2(10),
addition VARCHAR2(40), geoquality VARCHAR2(6), longitude FLOAT, latitude FLOAT);
/
CREATE OR REPLACE FORCE VIEW vw_address OF bs_address
WITH OBJECT IDENTIFIER (pkey)
AS
SELECT t.pkey, make_ref(vw_street, t.fkey_street), t.zipcode, t.house,
t.addition, t.geoquality, t.longitude, t.latitude
FROM tn_address t;
CREATE OR REPLACE FORCE VIEW vw_city OF bs_city
WITH OBJECT IDENTIFIER (pkey)
AS
SELECT t.pkey, t.name, make_ref(vw_region, t.fkey_region)
FROM tn_city t;
CREATE OR REPLACE FORCE VIEW vw_country OF bs_country
WITH OBJECT IDENTIFIER (pkey)
AS
SELECT pkey, uniqueid, name FROM tn_country;
CREATE OR REPLACE FORCE VIEW vw_region OF bs_region
WITH OBJECT IDENTIFIER (pkey)
AS
SELECT t.pkey, t.uniqueid, t.name, make_ref(vw_country, t.fkey_country)
FROM tn_region t;
CREATE OR REPLACE FORCE VIEW vw_street OF bs_street
WITH OBJECT IDENTIFIER (pkey)
AS
SELECT t.pkey, t.name, make_ref(vw_city, t.fkey_city)
FROM tn_street t;
INSERT INTO tn_country
VALUES ('1', 'US', 'United State');
INSERT INTO tn_region
VALUES ('1', 'HARRIS', 'Harris County', 1);
INSERT INTO tn_city
VALUES ('1', 'HOUSTON', '1');
INSERT INTO tn_street
VALUES ('1', 'OLD ROAD', '1');
INSERT INTO tn_address
VALUES ('1', '1', '77063', '86956',
NULL, NULL, NULL, NULL);
COMMIT;
SELECT * FROM vw_address;