sql - 带有 where 条件的 PL/SQL 更新查询作为带有一些空值的选择查询
问题描述
我想更新一个表,我已经为它编写了一个 pl/sql,我使用游标进行选择查询,选择查询的数据用作更新查询的有效值。问题是选择查询有时可能会返回 NULL 作为有效值,而 loop(cursor) 的转义序列是在遇到 null 时。如何在选择查询返回某个值时运行更新查询,并在返回 null 时跳过,然后在没有更多数据时结束游标。
选择语句是这样的
select phone_number from customers where last_name = 'SINGH';
现在可能有一些客户没有提供他们的电话号码
并且更新查询在游标的循环内
DECLARE
p_no customers.phone_number%type;
CURSOR t_lcpc is
select phone_number from customers where last_name in('SINGH', 'RATHORE', 'GUPTA','KUMAR','JAIN');
BEGIN
OPEN t_lcpc;
LOOP
FETCH t_lcpc into p_no;
EXIT WHEN t_lcpc%notfound;
execute immediate q'[update deals set country = "INDIA" where phone_number = :var1]' using p_no;
END LOOP;
CLOSE t_lcpc;
END;
我通常使用的转义序列是,EXIT WHEN t_lcpc%notfound;
但如果选择查询没有返回任何值(例如'GUPTA'),那么它将退出而不更新其余的last_names。
餐桌顾客
First_Name | Last_Name | Phone_Number | Book
ATUL | SINGH | 3241234 | 'Let Us C'
Aaman | RATHORE | 431343 | 'Cook Book for dummies'
Rahul | GUPTA | (null) | 'Network Security'
Rajnish | KUMAR | 234345 | 'guide to Australia'
Baibhav | JAIN | 123234 | 'TT for dummies'
我希望交易表能够像这样更新
Phone_Number | Country | Offers
3241234 | INDIA | new books
431343 | INDIA | new books
234345 | INDIA | new books
123234 | INDIA | new books
脚本仅在SELECT查询返回值并在返回时跳过时才能更新(null),并且在Select语句没有更多数据时,光标应结束。我在 Oracle 引擎上运行这个脚本。
解决方案
我知道,在光标中,t_lcpc
您应该只选择那些phone_number
不为空的。
这样就可以了,你只会得到那些已经phone_number
填写的人。
只是好奇你为什么使用过程,什么时候可以用简单的更新语句来做到这一点!
推荐阅读
- java - Maven多模块项目的intellij中的错误类路径
- javascript - 在 Reactjs 中更改 .env 文件的默认路径
- reactjs - 如何将 notistick/(anysnackbar) 与 redux-toolkit 一起使用并做出反应?
- angular - 如何在 Angular 的 index.html 中放置组件/模板占位符?
- apache - Apache 响应 404 而不是 403,忽略 F 标志
- git - 删除 GIT 历史记录(超过 6 个月的旧提交)
- bash - 用于识别同时包含“a.txt”和“b.txt”的子文件夹的 bash 脚本
- c - #include 的无限循环阻止代码的构建
- java - 为什么集合框架中没有栈接口?
- vba - 在多页中创建图像