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?
中的标志值
你没有更新任何东西;如果你想这样做,你必须使用 UPDATE
或 MERGE
语句。
但是,为什么 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';
我是 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?
中的标志值你没有更新任何东西;如果你想这样做,你必须使用 UPDATE
或 MERGE
语句。
但是,为什么 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';