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

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

为了写日志表的[充值前余额],必需先查询帐号表一次,得出充值前余额,其实用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的操作....)

posted on 2008-08-04 22:59  Madream.F  阅读(427)  评论(0编辑  收藏  举报