PL/SQL 通过游标更新行值

PL/SQL Update row value via cursor

我是 pl/sql 的新手,我被卡住了。我有一个由 3 列组成的 table:package_uid、csms_package_id 和标志。前两列已填充,第三列为空。当以过程比较 package_id-s 来自 table 和另一个 table 的方式调用过程时,标志列被填充,如果它们匹配,则标志应该是 'YES' .这是我的代码:

DECLARE
  package_uid varchar2(256);
  CURSOR abc IS SELECT csms_package_id, PACKAGE_UID, FLAG FROM table1 tpc;
  CURSOR defg IS SELECT package_id FROM table2 tpc2;
BEGIN
  for i in abc  loop
    for j in defg loop
      begin
        if i.CSMS_PACKAGE_ID=j.package_id THEN
          i.flag := 'YES' ;
          DBMS_OUTPUT.PUT_LINE(i.flag);
        end if;
      end;
    end loop;
  end loop;

end;

输出写入 'yes' 正确次数,但我的 table 未更新为 'yes' 值。如何更新 table?

中的标志值

你没有更新任何东西;如果你想这样做,你必须使用 UPDATEMERGE 语句。

但是,为什么 PL/SQL 以及为什么嵌套循环?这看起来非常低效。换一个简单的单一 merge 怎么样?

MERGE INTO table1 a
     USING table2 b
        ON (a.package_uid = b.package_id)
WHEN MATCHED
THEN
   UPDATE SET a.flag = 'YES';