我想从一个表中的嵌套表中获取值,然后将所述值插入到另一个表中
这是嵌套表的类型:
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表中插入国家主键作为外键?
答案 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;