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 过程

将新列添加到现有表中并使用 PL/SQL 中游标中的值更新它们

如何传递从多个表创建的 PL/SQL 游标记录?

创建带有 2 个游标、一个参数并从表中给出结果的 PL/SQL 脚本?

带有游标的 pl/sql 可变数组

PL/SQL - 动态访问光标数据