Oracle PL/SQL仅使用游标将数据从2个表检索到新表中

Oracle PL/SQL仅使用游标将数据从2个表检索到新表中,oracle,plsql,cursor,Oracle,Plsql,Cursor,嗨,我需要创建一个新表来存储两个表的数据。然后我需要创建一个存储过程来将数据从两个表传输到新表中。我将数据从第一个表传输到新表没有问题,当我将数据从第二个表传输到新表时,问题就出现了。因为它不是被插入到与其pubid匹配的行中,而是被插入到一个新行中。我想说,你很接近了 在第二个循环中,您不应该插入,而是更新现有行 您声明的游标: CURSOR cur_proceedings IS SELECT pubid, year FROM proceedings; 您在这里使用过它: OPEN cur_

嗨,我需要创建一个新表来存储两个表的数据。然后我需要创建一个存储过程来将数据从两个表传输到新表中。我将数据从第一个表传输到新表没有问题,当我将数据从第二个表传输到新表时,问题就出现了。因为它不是被插入到与其pubid匹配的行中,而是被插入到一个新行中。

我想说,你很接近了

在第二个循环中,您不应该插入,而是更新现有行

您声明的游标:

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;

嘿,当我在第二个循环中删除了insert语句,并将您的建议放在SQL命令行中执行时。它产生了一个错误,并表示“PL/SQL:ORA-00904:“CUR_程序”,“PUBID:无效标识符”以及“PLS-00225:子程序或游标‘CUR_程序’引用超出范围”。我将如何从这里开始你不应该得到它。我编辑了答案并添加了一些代码;看一看,是的,我也做了同样的事。但是我不知道为什么它仍然产生同样的错误。啊!道歉,应该是
v_程序
(即光标变量),而不是
cur_程序
。修正了,是的,现在可以了。非常感谢你。