Как я могу вставить значения из вложенной таблицы в другую таблицу? - PullRequest
0 голосов
/ 03 января 2019

Я хочу получить значения из вложенной таблицы в одной таблице и вставить указанные значения в другую таблицу

Вот тип для вложенной таблицы:

create or replace TYPE type_val AS OBJECT (
year        DATE,
amount     INTEGER
);

Вложенная таблица:

create or replace TYPE nt_type_val IS
TABLE OF type_val;

Вот таблица, которая содержит вложенную таблицу:

CREATE TABLE country (
    id                  INTEGER NOT NULL,
    name                VARCHAR2(100) NOT NULL,
    continent           VARCHAR2(30) NOT NULL,
    prod_an             nt_type_val 
)
NESTED TABLE prod_an STORE AS nt_prod_an;

Вот таблица, в которую я хочу вставить

CREATE TABLE prod_country_ai(
    year            DATE NOT NULL,
    amount          INTEGER NOT NULL,
    country_fk      INTEGER NOT NULL
)

Что я хочу сделать, этоЯ хочу получить значения из prod_an в таблице стран для каждой страны и сохранить их в таблице prod_country_ai соответственно год и сумму из вложенной таблицы (prod_an) в год и сумму в prod_country_ai и первичный ключ из страны в country_fk наprod_country_ai.

У меня есть следующий фрагмент для процедуры, которая сделает это:

DECLARE
CURSOR inner_table IS
 SELECT  t.* FROM country p, TABLE(p.prod_an) t 
 WHERE p.name = 'Portugal';
BEGIN
  FOR i IN inner_table LOOP
     dbms_output.put_line( i.year || i.quantity);
    END LOOP;
END;

Это успешно выводит год, за которым следует сумма, но это происходит только после указания названия страныРешение, о котором я подумал, заключается в запуске «внешнего цикла», который циклически повторяется в таблице стран (может быть по идентификатору или по названию страны, но несильно измениться, потому что каждое значение будет уникальным в любом случае), и я предполагаю, что я могу использовать i.year и i.quantity непосредственно в операторе вставки внутри «внутреннего цикла» для вставки в prod_country_ai, но я не уверен, какЯ могу сделать это, также, я думаю, что переменные обрабатываются как «локальные» внутри цикла, так как я могу добавить вставку первичного ключа страны в качестве внешнего ключа в таблицу prod_country_ai?

1 Ответ

0 голосов
/ 03 января 2019

Вам не нужна процедура для этого. Это можно сделать с помощью INSERT ... SELECT из стран, перекрестно соединяющих вложенные таблицы.

INSERT INTO prod_country_ai
            (year,
             ammount,
             country_fk)
            SELECT p.year,
                   p.ammount,
                   c.id
                   FROM country c
                        CROSS JOIN TABLE(c.prod_an) p;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...