How to Create oracle Nested Table?
Create a table with NESTED TABLE column:
Create a table with NESTED TABLE column:
CREATE OR REPLACE TYPE my_tab_t AS TABLE OF VARCHAR2(30);
/
CREATE TABLE nested_table (id NUMBER, col1 my_tab_t)
NESTED TABLE col1 STORE AS col1_tab;
Insert data into table: INSERT INTO nested_table VALUES (1, my_tab_t('A'));
INSERT INTO nested_table VALUES (2, my_tab_t('B', 'C'));
INSERT INTO nested_table VALUES (3, my_tab_t('D', 'E', 'F'));
COMMIT;
Select from nested table: SQL> SELECT * FROM nested_table;
ID COL1
---------- ------------------------
1 MY_TAB_T('A')
2 MY_TAB_T('B', 'C')
3 MY_TAB_T('D', 'E', 'F')
Unnesting the subtable: SQL> SELECT id, COLUMN_VALUE FROM nested_table t1, TABLE(t1.col1) t2;
ID COLUMN_VALUE
---------- ------------------------
1 A
2 B
2 C
3 D
3 E
3 F
6 rows selected.
A more complicated multi-column nested table where customers can have multiple addresses: CREATE TYPE address_t AS OBJECT (
street VARCHAR2(30),
city VARCHAR2(20),
state CHAR(2),
zip CHAR(5) );
/
CREATE TYPE address_tab IS TABLE OF address_t;
/
CREATE TABLE customers (
custid NUMBER,
address address_tab )
NESTED TABLE address STORE AS customer_addresses;
INSERT INTO customers VALUES (1,
address_tab(
address_t('101 First', 'Redwood Shores', 'CA', '94065'),
address_t('123 Maple', 'Mill Valley', 'CA', '90952')
) );
Unnesting the subtable: SQL> select c.custid, u.*
2 from customers c, table (c.address) u
3 ;
CUSTID STREET CITY ST ZIP
---------- ------------------------------ -------------------- -- -----
1 101 First Redwood Shores CA 94065
1 123 Maple Mill Valley CA 90952
To view the TYPE creation content
select text from user_source where name = 'MY_TAB_T' order by line select text from user_source where name = 'MY_TAB_T' order by line select * from ALL_TYPES;
Source : http://www.orafaq.com/wiki/NESTED_TABLE
No comments:
Post a Comment