2016-05-10 4 views

Antwort

1
CREATE TYPE A_TYPE AS OBJECT(
    id INT, 
    col1 INT 
); 
/

CREATE TYPE A_REF_TABLE_TYPE AS TABLE OF REF A_TYPE; 
/

CREATE TYPE B_TYPE AS OBJECT(
    id INT, 
    col1 INT 
); 
/

CREATE TYPE B_REF_TABLE_TYPE AS TABLE OF REF B_TYPE; 
/

CREATE TYPE C_TYPE AS OBJECT(
    id  INT, 
    a_list A_REF_TABLE_TYPE, 
    b_list B_REF_TABLE_TYPE, 
    col1 INT 
); 
/

CREATE TABLE A_TAB OF A_TYPE(
    ID PRIMARY KEY 
); 

CREATE TABLE B_TAB OF B_TYPE(
    ID PRIMARY KEY 
); 

CREATE TABLE C_TAB OF C_TYPE(
    ID PRIMARY KEY 
) 
NESTED TABLE a_list STORE AS c_a_lists 
NESTED TABLE b_list STORE AS c_b_lists; 

INSERT INTO A_TAB VALUES(A_TYPE(1, 3)); 
INSERT INTO A_TAB VALUES(2, 4); 

INSERT INTO B_TAB VALUES (B_TYPE(1, 7)); 
INSERT INTO B_TAB VALUES (2, 2); 
INSERT INTO B_TAB VALUES (3, 10); 

INSERT INTO C_TAB VALUES (
    1, 
    A_REF_TABLE_TYPE(
    (SELECT REF(a) FROM A_TAB a WHERE ID = 2) -- Single value 
), 
    (-- Multiple values 
    SELECT CAST(COLLECT(REF(b)) AS B_REF_TABLE_TYPE) 
    FROM TAB_B b 
    WHERE ID IN (1, 3) 
), 
    42 
); 

INSERT INTO C_TAB VALUES (
    2, 
    NULL,    -- Unknown 
    B_REF_TABLE_TYPE(), -- No values 
    54 
); 

Ausgang:

SELECT * FROM C_TAB; 

ID A_LIST       B_LIST          COL1 
-- ------------------------------- --------------------------------------------- ---- 
1 A_REF_TABLE_TYPE(A_TYPE(2,4)) B_REF_TABLE_TYPE(B_TYPE(1,7), B_TYPE(3,10)) 42 
2 (null)       B_REF_TABLE_TYPE()        54 
+0

so würde dies wäre es, wenn die drei Tabellen meiner zentriert Tisch verbindet ? –

+1

@EAlexisT Dies ist ein Beispiel für eine einzelne zentrale Tabelle 'C_TAB' und zwei weitere' A_TAB' und 'B_TAB', die damit verbunden sind - Sie können das allgemeine Prinzip leicht an Ihren speziellen Anwendungsfall anpassen. – MT0

+0

thx, das hat mir sehr geholfen :) –

Verwandte Themen