sql - PL/SQL 通过游标更新行值
问题描述
我是 pl/sql 的新手,我被卡住了。我有一个由 3 列组成的表:package_uid、csms_package_id 和 flag。前两列已填满,第三列为空。当以过程比较该表和另一个表中的 package_id-s 的方式调用过程时,标志列被填充,如果它们匹配,则标志应为“是”。这是我的代码:
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;
输出写入“是”正确次数,但我的表未使用“是”值更新。如何更新表中的标志值?
解决方案
你没有更新任何东西;如果你想这样做,你必须使用UPDATE
orMERGE
声明。
不过,为什么要使用 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';
推荐阅读
- regex - 提取特定字符之间的文本
- bash - 使用 bash 脚本安装 Nvm
- entity-framework - 是否可以在实体框架中编辑迁移?
- python - 在 seaborn 热图的列中突出显示最大值
- sap-cloud-sdk - 如何将 Odata 字段作为常量从 VDM 访问/引用/重用到另一个特定于应用程序的 POJO 类中
- flutter - 如何在 Flutter 中设置工作日多天的本地通知?
- python - 雅虎熊猫数据阅读器日期差异
- python - PyQt5 更新可编辑 QTableView 中的值
- r - 计算 R 中每个 ID 的每年中位数并绘制结果
- javascript - 阅读 React 中的私有 google 电子表格(使用 Auth)