Продолжается подписка на наши издания! Вы не забыли подписаться?

Листинг 2:

Этот код заполняет базу данных, созданную кодом Листинга 1, некими взятыми с потолка данными.

INSERT INTO STOCK_TAB VALUES(1004, 6750.00, 2); 
INSERT INTO STOCK_TAB VALUES(1011, 4500.23, 2); 
INSERT INTO STOCK_TAB VALUES(1534, 2234.00, 2); 
INSERT INTO STOCK_TAB VALUES(1535, 3456.23, 2);
-- Insert, использующий select и конструктор.
-- Внимание: insert into test1 select stock_info_t(a.*), 99 from stock_tab a не работает.
INSERT INTO CUSTOMER_TAB VALUES (1, 'Jean Nance',
address_t('2 Avocet Drive', 'Redwood Shores', 'CA', '95054'), 
phone_list_t('415-555-1212')) ;
INSERT INTO CUSTOMER_TAB VALUES (2, 'John Nike', address_t('323 College Drive', 'Edison', 'NJ', '08820'),
phone_list_t('609-555-1212','201-555-1212')) ;
REM CREATE THE PARENT ROW IN PURCHASE_TAB.
INSERT INTO PURCHASE_TAB         -- <== Insert с использованием ссылки на таблицу покупателей.
SELECT 1001, REF(C),         -- <== Ref на custno = 1. C - alias для customer_tab 
SYSDATE,'10-MAY-1997',
line_item_list_t(),        -- <== Записи во вложенной таблице для PO 1001 отсутствуют.
NULL                -- <== Адрес не указан 
FROM customer_tab C
WHERE C.custno = 1 ; 
/* Заметьте, что LINE_ITEM_LIST_T() - пустая таблица, отличная от NULL. null означает, что для данной строки не существует вложенных таблиц. Если указать NULL, вы не сможете создать записи во вложенной таблице, а любая попытка сделать это выдаст ora-22908 (ссылка на null-таблицу). Если вложенная таблица равна null, то первым делом придется создать пустую таблицу, а затем уже добавлять записи во вложенную. Теперь создаем строки во вложенной таблице.*/
INSERT INTO THE ( SELECT P.line_item_list FROM purchase_tab P WHERE P.pono = 1001) SELECT 01, REF(S), 12, 0 FROM stock_tab S WHERE S.stockno = 1534;
/* Вышестоящий insert использует keyword 'THE' для вставки строк во вложенную таблицу, специфицированную line_item_list для pono 1001(stored as null). Этот оператор требуется для определения одной колонки вложенной таблицы в PURCHASE_TAB, т.е. вложенной таблицы line_item_list где pono = 1001. Заметьте - pono 1001 здесь - множество строк вложенной таблицы, определяемой line_item_list. Также обратите внимание, что в 8.1 использование оператора THE не рекомендуется. Его заменяет оператор TABLE. */
INSERT INTO PURCHASE_TAB SELECT 2001, REF(C), SYSDATE,'20-MAY-1997',
line_item_list_t(), address_t('55 Madison Ave','Madison','WI','53715')
FROM customer_tab C WHERE C.custno = 2;
INSERT INTO THE ( SELECT P.line_item_list FROM purchase_tab P WHERE 
P.pono = 1001 )
SELECT 02, REF(S), 10, 10 FROM stock_tab S WHERE S.stockno = 1535;
INSERT INTO THE (SELECT P.line_item_list FROM purchase_tab P WHERE P.pono = 2001 )
SELECT 10, REF(S), 1, 0 FROM stock_tab S WHERE S.stockno = 1004;
INSERT INTO THE ( SELECT P.line_item_list FROM purchase_tab P WHERE P.pono = 2001 )
VALUES( line_item_t(11, NULL, 2, 1)) ;
/* Вставка в таблицу с вложенным объектом: */
INSERT INTO TEST_TABLE SELECT STOCK_INFO_T(S.STOCKNO, S.COST, S.TAX_CODE) , 99 FROM STOCK_TAB S; 

Copyright © 1994-2016 ООО "К-Пресс"