CREATE OR REPLACE TYPE tp_sub_data_countries_tb IS TABLE OF VARCHAR2(3);
Type created.
CREATE OR REPLACE TYPE tp_sub_data_countries_tb IS TABLE OF VARCHAR2(3);
Type created.
CREATE OR REPLACE TYPE tp_sub_data_categories_tb IS TABLE OF VARCHAR2(30);
Type created.
CREATE OR REPLACE TYPE tp_conditions IS OBJECT
(
sub_countries tp_sub_data_countries_tb
, sub_categories tp_sub_data_categories_tb
);
Type created.
CREATE OR REPLACE TYPE tp_conditions_tab IS TABLE OF tp_conditions;
Type created.
CREATE OR REPLACE TYPE tp_sub_data IS OBJECT
(
object_name VARCHAR2(100) --Ex: "a fancy name"
, object_event_type VARCHAR2(10) --Ex: create
, object_type VARCHAR2(20) --Ex: `product` considered for now
, object_event_match VARCHAR2(10) --Ex 'exact' match considered for now
, conditions tp_conditions_tab --Ex "sub_countries": ["IT", "DE"], "sub_categories": ["HI-FI", "computers"]
);
Type created.
CREATE OR REPLACE TYPE tp_sub_data_tab IS TABLE OF tp_sub_data;
Type created.
CREATE SEQUENCE seq_subscriptions START WITH 1 MINVALUE 1 INCREMENT BY 1 NOCYCLE NOCACHE NOORDER
Sequence created.
CREATE TABLE subscriptions
(
ID NUMBER (*, 0)
, SUBSCRIBER NUMBER (*, 0) NOT NULL ENABLE
, DATA_IN DATE NOT NULL ENABLE
, DATA_OUT DATE
, SUB_DATA tp_sub_data_tab
, CREATED_BY NUMBER (*, 0) NOT NULL ENABLE
, CREATION_DATE DATE DEFAULT SYSDATE NOT NULL ENABLE
, LAST_UPDATED_BY NUMBER (*, 0) NOT NULL ENABLE
, LAST_UPDATE_DATE DATE DEFAULT SYSDATE NOT NULL ENABLE
, TIME_STAMP TIMESTAMP(3) DEFAULT SYSTIMESTAMP NOT NULL ENABLE
, CONSTRAINT subscriptions_pk PRIMARY KEY (ID) USING INDEX (CREATE UNIQUE INDEX subscriptions_UIX01 ON subscriptions(ID))
)
NESTED TABLE SUB_DATA store as subscriptions_data_tab (NESTED TABLE conditions STORE AS conditions_data_tab(NESTED TABLE sub_countries STORE AS countries_tab, NESTED TABLE sub_categories STORE AS categories_tab))
return as locator
Table created.
insert into subscriptions VALUES
(
1, 12345, trunc(sysdate), NULL
, tp_sub_data_tab
(tp_sub_data
('a fancy name', 'create', 'product', 'exact'
, tp_conditions_tab
(
tp_conditions(
tp_sub_data_countries_tb('IT', 'DE'), tp_sub_data_categories_tb('HI-FI', 'computers')
)
)
)
)
, 147478
, sysdate
, 147478
, sysdate
, systimestamp
)
1 row(s) inserted.
select * from subscriptions s
JOIN TABLE (s.sub_data) s1 ON 1=1
JOIN TABLE (s1.conditions) s2 on 1=1
JOIN TABLE (s2.sub_countries) s3 on 1=1
JOIN TABLE (s2.sub_categories) s4 on 1=1
ID | SUBSCRIBER | DATA_IN | DATA_OUT | SUB_DATA | CREATED_BY | CREATION_DATE | LAST_UPDATED_BY | LAST_UPDATE_DATE | TIME_STAMP | OBJECT_NAME | OBJECT_EVENT_TYPE | OBJECT_TYPE | OBJECT_EVENT_MATCH | CONDITIONS | SUB_COUNTRIES | SUB_CATEGORIES | COLUMN_VALUE | COLUMN_VALUE | 1 | 12345 | 30-SEP-20 | - | [unsupported data type] | 147478 | 30-SEP-20 | 147478 | 30-SEP-20 | 30-SEP-20 08.46.16.242000 AM | a fancy name | create | product | exact | [unsupported data type] | [unsupported data type] | [unsupported data type] | IT | HI-FI | 1 | 12345 | 30-SEP-20 | - | [unsupported data type] | 147478 | 30-SEP-20 | 147478 | 30-SEP-20 | 30-SEP-20 08.46.16.242000 AM | a fancy name | create | product | exact | [unsupported data type] | [unsupported data type] | [unsupported data type] | IT | computers | 1 | 12345 | 30-SEP-20 | - | [unsupported data type] | 147478 | 30-SEP-20 | 147478 | 30-SEP-20 | 30-SEP-20 08.46.16.242000 AM | a fancy name | create | product | exact | [unsupported data type] | [unsupported data type] | [unsupported data type] | DE | HI-FI | 1 | 12345 | 30-SEP-20 | - | [unsupported data type] | 147478 | 30-SEP-20 | 147478 | 30-SEP-20 | 30-SEP-20 08.46.16.242000 AM | a fancy name | create | product | exact | [unsupported data type] | [unsupported data type] | [unsupported data type] | DE | computers |
---|