Понедельник, 30.12.2024, 21:12

  • Полезные Скрипты Oracle
Главная Книги Быстрый Поиск О Сайте

Oracle
PL/SQL
Решения для Oracle
ПОИСК
Быстрый поиск
 Вложенные таблицы (Nested Tables)
Вложенные таблицы (Nested Tables).

Вложенная таблица это абстрактный тип данных в Oracle, который позволяет создать колонку в таблице который содержит многозначние данные.


Следующий пример создает таблицу с колонкой вложенной таблицы (Nested Table):
CREATE OR REPLACE TYPE  MY_TAB_T  AS TABLE OF VARCHAR2(30);
/
CREATE TABLE  MY_NESTED_TABLE(
ID1     NUMBER,
COL1
MY_TAB_T)
NESTED TABLE  COL1 STORE AS  COL1_TAB;
/

Результат:



Вставление данных в таблицу:

INSERT INTO 
MY_NESTED_TABLE 
VALUES  (1,MY_TAB_T('A'));
INSERT INTO  MY_NESTED_TABLE  VALUES  (2,MY_TAB_T('B','C'));
INSERT INTO  MY_NESTED_TABLE  VALUES  (3,MY_TAB_T('D','E','F'));


SELECT из вложенной таблицы:

SELECT
ID1,COL1 FROM  MY_NESTED_TABLE;

Результат:
ID1COL1
1<Collection>
2<Collection>
3<Collection>






SELECT из таблицы с подтаблицой:

SELECT
ID1,COLUMN_VALUE FROM  MY_NESTED_TABLE T1,TABLE(T1.COL1) ;

Результат:

ID1COLUMN_VALUE
1A
2B
2C
3D
3E
3F


Список и детали вложенных таблиц можно посмотреть в представлениях:
USER_NESTED_TABLES,
USER_NESTED_TABLE_COLS,
ALL_NESTED_TABLES,ALL_NESTED_TABLE_COLS,
DBA_NESTED_TABLES,DBA_NESTED_TABLE_COLS.



Вложенная таблица может состоять из разных столбцов:
CREATE OR REPLACE TYPE  T_ADDRESS  AS OBJECT(
                                              STREET    VARCHAR2(50),

                                              CITY          VARCHAR2(30),

                                              STATE       VARCHAR2(30),

                                              COUNTRY  VARCHAR2(30),

                                              ZIP             CHAR(5)
);
/


CREATE OR REPLACE TYPE 
ADDRESS_TAB 
AS TABLE OF
T_ADDRESS;
/

CREATE TABLE 
PERSONS(
                           ID_PERSON       NUMBER,
                           FIRST_NAME    
VARCHAR2(30),
                           LAST_NAME      VARCHAR2(30),
                          ADDRESS          ADDRESS_TAB)
NESTED TABLE ADDRESS STORE AS  ADDRESS_TABLE
;
/

INSERT INTO  PERSONS  VALUES  (1,'АЛЕКСАНДР','ПЕТРОВ',ADDRESS_TAB(
                                                              T_ADDRESS('МАРАТА','САНКТ-ПЕТЕРБУРГ','ЛО','РФ',11111),
                                                             
T_ADDRESS('ДЕКАБРИСТОВ','МОСКВА',' ','РФ',22222)));
/

INSERT INTO TABLE(SELECT ADDRESS FROM  PERSONS WHERE ID_PERSON=1) ADDR
VALUES
(T_ADDRESS('RUE DIE RIVOLI','PARIS','ILE-DE-FRANCE','FR',33333));
/

SELECT T.FIRST_NAME,T.LAST_NAME,A.* FROM  PERSONS T, TABLE(T.ADDRESS) A;
/

UPDATE TABLE
(SELECT ADDRESS FROM  PERSONS WHERE ID_PERSON=1) ADDR
SET ADDR.STREET='
МАРАТА 1'
WHERE
ADDR.CITY='САНКТ-ПЕТЕРБУРГ';
/
UPDATE TABLE(SELECT ADDRESS FROM  PERSONS WHERE ID_PERSON=1) ADDR
SET VALUE (ADDR)=
T_ADDRESS('УЛИЦА РИВОЛИ','ПАРИЖ','ИЛЬ-ДЕ-ФРАНС','ФР',44444)
WHERE
VALUE (ADDR)=T_ADDRESS('RUE DIE RIVOLI','PARIS','ILE-DE-FRANCE','FR',33333);
--WHERE
ADDR.ZIP=33333;
/
DELETE TABLE(SELECT ADDRESS FROM  PERSONS WHERE ID_PERSON=1) ADDR
WHERE ADDR.
ZIP=22222;
/







Copyright sql.ucoz.com © 2024
Оцените сайт

Всего ответов: 52