sql - 如何将嵌套表中的值插入另一个表?
问题描述
我想从一个表中的嵌套表中获取值并将所述值插入到另一个表中
这是嵌套表的类型:
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 表中插入国家主键作为外键?
解决方案
您不需要为此执行任何程序。您可以使用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;
推荐阅读
- javascript - backgroundColor 没有做任何事情?
- sql-server - 日期字段上的批量错误,但插入作品 SQL Server
- reactjs - 确认标记仅在 react-native 中在折线上移动
- css - “@media (min-width: 900px)”是查看浏览器宽度还是显示器宽度?
- c# - 当我从中调用另一个异步方法时,异步方法缺少等待运算符消息?
- c - 使用 gets() 读取 char* 会导致“Core Dumped”错误(C 语言)
- google-apps-script - Google Apps 脚本 - SpreadsheetApp.openByUrl() 没有错误但不加载任何内容
- netsuite - 如何通过 Netsuite suitescript 2.0 中的 RESTlet 脚本获取捆绑信息?
- twitter-bootstrap - 轮播显示为单独的图像
- tcl - TCL - 在浮动值列表中选择第 n 项