Технология Клиент-Сервер 1999'3 |
|||||||
|
Этот код заполняет базу данных, созданную кодом Листинга 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 ООО "К-Пресс"