Table of Contents
How to store string array in Oracle DB?
There are 2 types of array which are persistent in type. So they can be stored in Oracle DB.
- Nested Table
- Varray
Nested Table in SQL:
Creating Nested Table Object:
--How to store string array in Oracle DB? : Example CREATE OR REPLACE TYPE ADDR_TYPE AS OBJECT (STATE VARCHAR2(100), CITY VARCHAR2(100) ); /
CREATE OR REPLACE TYPE ADDR_TAB AS TABLE OF ADDR_TYPE; /
Verifying Nested Table Object Data Dictionary:
--How to store string array in Oracle DB? : View data SELECT TYPE_NAME, TYPE_OID, TYPECODE, ATTRIBUTES, PREDEFINED, INCOMPLETE, FINAL, INSTANTIABLE FROM USER_TYPES WHERE TYPE_NAME IN ('ADDR_TYPE', 'ADDR_TAB');
Creating Nested Tables:
--How to store string array in Oracle DB? : Example CREATE TABLE CUSTOMER_ADD_INFO (CUSTID NUMBER(6), CUST_NAME VARCHAR2(100), CUST_ADDRESS ADDR_TAB ) NESTED TABLE CUST_ADDRESS STORE AS CUST_ADD;
Verifying Nested Table Data Dictionary:
SELECT * FROM USER_NESTED_TABLES WHERE TABLE_NAME = 'CUST_ADD';
Inserting Data into Nested Tables:
INSERT INTO CUSTOMER_ADD_INFO VALUES(100001, 'Steven Smith', ADDR_TAB(ADDR_TYPE('New York','New York'))); INSERT INTO CUSTOMER_ADD_INFO VALUES(100002, 'Jhon Smith', ADDR_TAB(ADDR_TYPE('California','California')));
SELECT * FROM CUSTOMER_ADD_INFO;
Above data from CUST_ADDRESS column are not user readable format. To convert it user readable format user below query:
--How to store string array in Oracle DB? : View data SELECT A.CUSTID, A.CUST_NAME, B.STATE, B.CITY FROM CUSTOMER_ADD_INFO A, TABLE(A.CUST_ADDRESS) B;
Update a specific record in Nested table column:
--How to store string array in Oracle DB? : Update data UPDATE TABLE(SELECT CUST_ADDRESS FROM CUSTOMER_ADD_INFO WHERE CUSTID = 100001 ) T SET T.STATE = 'New York State', T.CITY = 'New York City';
SELECT A.CUSTID, A.CUST_NAME, B.STATE, B.CITY FROM CUSTOMER_ADD_INFO A, TABLE(A.CUST_ADDRESS) B;
Further Update, Insert and verify data from Nested Tables:
INSERT INTO CUSTOMER_ADD_INFO VALUES(100001, 'Steven Smith', ADDR_TAB(ADDR_TYPE('Boston','Boston')));
SELECT A.CUSTID, A.CUST_NAME, B.STATE, B.CITY FROM CUSTOMER_ADD_INFO A, TABLE(A.CUST_ADDRESS) B;
SELECT A.CUSTID, A.CUST_NAME, B.STATE, B.CITY FROM CUSTOMER_ADD_INFO A, TABLE(A.CUST_ADDRESS) B WHERE A.CUSTID = 100001 ORDER BY CUSTID;
Delete a specific record from Nested Table:
--How to store string array in Oracle DB? : Delete data DELETE TABLE(SELECT T.CUST_ADDRESS FROM CUSTOMER_ADD_INFO T, TABLE(T.CUST_ADDRESS) D WHERE T.CUSTID = 100001 AND D.STATE = 'Boston');
SELECT A.CUSTID, A.CUST_NAME, B.STATE, B.CITY FROM CUSTOMER_ADD_INFO A, TABLE(A.CUST_ADDRESS) B WHERE A.CUSTID = 100001 ORDER BY CUSTID;
Varray in SQL:
CREATE OR REPLACE TYPE ADDR_TAB_VA IS VARRAY(10) OF ADDR_TYPE; /
Verifying Varrays from Data Dictionary:
SELECT TYPE_NAME, TYPE_OID, TYPECODE, ATTRIBUTES, PREDEFINED, INCOMPLETE, FINAL, INSTANTIABLE FROM USER_TYPES WHERE TYPE_NAME = 'ADDR_TAB_VA';
Creating Table with Varray column:
--How to store string array in Oracle DB? : Example CREATE TABLE CUSTOMER_ADD_INFO_VA (CUSTID NUMBER(6), CUST_NAME VARCHAR2(100), CUST_ADDRESS ADDR_TAB_VA );
Inserting data into table with Varray column:
INSERT INTO CUSTOMER_ADD_INFO_VA VALUES(100001, 'Steven Smith', ADDR_TAB_VA(ADDR_TYPE('New York','New York'))); INSERT INTO CUSTOMER_ADD_INFO_VA VALUES(100002, 'Jhon Smith', ADDR_TAB_VA(ADDR_TYPE('California','California')));
Selecting data from table with Varray column:
SELECT * FROM CUSTOMER_ADD_INFO_VA;
Above CUST_ADDRESS column is not in readable format. To convert it in user readable format use the below query:
--How to store string array in Oracle DB? : View data SELECT A.CUSTID, A.CUST_NAME, B.STATE, B.CITY FROM CUSTOMER_ADD_INFO_VA A, TABLE(A.CUST_ADDRESS) B ORDER BY CUSTID;
Update a specific record in Varray column:
UPDATE CUSTOMER_ADD_INFO_VA SET CUST_ADDRESS = ADDR_TAB_VA(ADDR_TYPE('New York State', 'New York City')) WHERE CUSTID = 100001;
SELECT A.CUSTID, A.CUST_NAME, B.STATE, B.CITY FROM CUSTOMER_ADD_INFO_VA A, TABLE(A.CUST_ADDRESS) B ORDER BY CUSTID;
Further Insert and Query data from table with Varray:
INSERT INTO CUSTOMER_ADD_INFO_VA VALUES(100001, 'Steven Smith', ADDR_TAB_VA(ADDR_TYPE('Boston','Boston')));
SELECT A.CUSTID, A.CUST_NAME, B.STATE, B.CITY FROM CUSTOMER_ADD_INFO_VA A, TABLE(A.CUST_ADDRESS) B ORDER BY CUSTID;
Can not perform Delete operation on a Varray:
DELETE TABLE(SELECT T.CUST_ADDRESS FROM CUSTOMER_ADD_INFO_VA T, TABLE(T.CUST_ADDRESS) D WHERE T.CUSTID = 100001 AND D.STATE = 'Boston' );
RELATED TOPICS: