如何将嵌套表中的值插入另一个表?

时间:2019-01-03 00:09:13

标签: sql database oracle plsql

我想从一个表中的嵌套表中获取值,然后将所述值插入到另一个表中

这是嵌套表的类型:

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)中的year和ammount分别存储到year和prod_country_ai中的ammount并将从国家/地区的主键输入到prod_country_ai上的country_fk中。

对于执行该操作的过程,我有以下内容:

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;

这会成功输出年份,后跟金额,但是只有在指定国家名称时才这样做,我想到的解决方案是运行“外循环”,该循环在国家表上循环(可以按ID或按国家命名它不会有太大变化,因为每个值在任一方向上都是唯一的),我想我可以直接在“内部循环”内的插入语句上使用i.year和i.quantity插入prod_country_ai,但我'我不确定如何做到这一点,而且,我认为变量在循环内被视为“本地”,因此我该如何在prod_country_ai表中插入国家主键作为外键?

1 个答案:

答案 0 :(得分:2)

您不需要执行此过程。您可以使用来自交叉连接嵌套表的国家/地区的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;