首页 > 解决方案 > 如何将嵌套表中的值插入另一个表?

问题描述

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

这是嵌套表的类型:

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 和主要的年份和金额中在 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 表中插入国家主键作为外键?

标签: sqldatabaseoracleplsql

解决方案


您不需要为此执行任何程序。您可以使用INSERT ... SELECT来自国家/地区的交叉连接嵌套表来执行此操作。

INSERT INTO prod_country_ai (year, amount, country_fk)
    SELECT 
        p.year, p.amount, c.id
    FROM 
        country c
    CROSS JOIN TABLE(c.prod_an) p;

推荐阅读