【问题标题】:PL/SQL ONLY using a cursor to retrieve data from 2 tables into a new tablePL/SQL 仅使用游标将 2 个表中的数据检索到新表中
【发布时间】:2021-04-05 17:06:28
【问题描述】:

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

【问题讨论】:

    标签: oracle plsql cursor


    【解决方案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。固定。
    猜你喜欢
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多