首页 > 解决方案 > 带有 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 引擎上运行这个脚本。

标签: sqloracleplsql

解决方案


我知道,在光标中,t_lcpc您应该只选择那些phone_number不为空的。

这样就可以了,你只会得到那些已经phone_number填写的人。

只是好奇你为什么使用过程,什么时候可以用简单的更新语句来做到这一点!


推荐阅读