Update 语句返回新值

在业务系统里,客户充值的时候,会更新目前余额,并插入一条日志。

如:客户帐号表用里有(客户号,余额);日志表字段有(客户号,充值前余额,充值额)。

为了写日志表的[充值前余额],必需先查询帐号表一次,得出充值前余额,其实用update ...returning一步就可以,不需要再查询一次;

update....returning ... into ... 返回update后的新值;

今天突然想起来,mark一下...(说不准以后还会用到)
直接进入代码...
测试表: test 数据:

SQL代码
  1. SQL> select * from test;  
  2.   
  3.         FID            AMOUNT  
  4. ----------- -----------------  
  5.           1            100.01  
  6.           2            200.02  
  7.           3            300.03  
  8.   
  9. SQL>   

通过 update ...returning...into... 获取新值的方法:

SQL代码
  1. SQL> SET SERVEROUTPUT ON  
  2. SQL> DECLARE  
  3.   2       f_amount TEST.Amount%TYPE;  
  4.   3       n_add NUMBER;  
  5.   4       BEGIN  
  6.   5    
  7.   6       n_add:= 100; -- 增加的值  
  8.   7    
  9.   8      UPDATE TEST  
  10.   9       SET amount = amount + n_add  -- 充值  
  11.  10      WHERE fid = 1  
  12.  11     RETURNING amount INTO f_amount; -- update 后的值  
  13.  12    
  14.  13     dbms_output.put_line(f_amount);         -- 目前值  
  15.  14     dbms_output.put_line(f_amount - n_add); -- 原来值  
  16.  15    
  17.  16  END;  
  18.  17  /  
  19.   
  20. 200.01  
  21. 100.01  
  22.   
  23. PL/SQL procedure successfully completed  
  24.   
  25. SQL>   

减少一次查询。(不过有人一定会说,客户号是主键,查一次很快的呀。,偶的观点依然是尽量减少对DB的操作....)

转载于:https://www.cnblogs.com/Madream/articles/1260496.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值