PL/SQL 仅使用游标将 2 个表中的数据检索到新表中
Posted
技术标签:
【中文标题】PL/SQL 仅使用游标将 2 个表中的数据检索到新表中【英文标题】:PL/SQL ONLY using a cursor to retrieve data from 2 tables into a new table 【发布时间】:2021-04-05 17:06:28 【问题描述】:您好,我需要创建一个新表来存储两个表的数据。然后我需要创建一个存储过程来将两个表中的数据传输到新表中。我将数据从第一个表传输到新表没有问题,当我将数据从第二个表传输到新表时出现问题。因为它不是被插入到与其 pubid 匹配的行中,而是被插入到新行中。
【问题讨论】:
【参考方案1】:我会说,你已经很接近了。
在第二个循环中,您不应该 INSERT
,而是 UPDATE
现有行。
你声明的光标:
CURSOR cur_proceedings IS
SELECT pubid, year FROM proceedings;
你在这里使用过它:
OPEN cur_proceedings;
LOOP
FETCH cur_proceedings INTO v_proceedings;
EXIT WHEN cur_proceedings%NOTFOUND;
-- Instead of INSERT:
-- INSERT INTO publication_master(proceeding_year)
-- VALUES(v_proceedings.year);
-- use UPDATE:
update publication_master m set
m.proceeding_year = v_proceedings.year
where m.pubid = v_proceedings.pubid;
END LOOP;
CLOSE cur_proceedings;
【讨论】:
嘿,当我在第二个循环中删除插入语句并输入您的建议并在 SQL 命令行中执行它时。它产生了一个错误并说“PL/SQL:ORA-00904:“CUR_PROCEEDINGS”。“PUBID”:无效标识符”以及“PLS-00225:子程序或游标'CUR_PROCEEDINGS'引用超出范围”。我将如何从这里开始 你不应该得到它。我编辑了答案并添加了更多代码;看看吧。 是的,我做了同样的事情。但我不确定为什么它仍然会产生同样的错误。 啊!抱歉,应该是v_proceedings
(即游标变量),而不是cur_proceedings
。固定。以上是关于PL/SQL 仅使用游标将 2 个表中的数据检索到新表中的主要内容,如果未能解决你的问题,请参考以下文章
将新列添加到现有表中并使用 PL/SQL 中游标中的值更新它们