在业务系统里,客户充值的时候,会更新目前余额,并插入一条日志。
如:客户帐号表用里有(客户号,余额);日志表字段有(客户号,充值前余额,充值额)。
为了写日志表的[充值前余额],必需先查询帐号表一次,得出充值前余额,其实用update ...returning一步就可以,不需要再查询一次;
update....returning ... into ... 返回update后的新值;
今天突然想起来,mark一下...(说不准以后还会用到)
直接进入代码...
测试表: test 数据:
SQL代码
- SQL> select * from test;
- FID AMOUNT
- ----------- -----------------
- 1 100.01
- 2 200.02
- 3 300.03
- SQL>
通过 update ...returning...into... 获取新值的方法:
SQL代码
- SQL> SET SERVEROUTPUT ON
- SQL> DECLARE
- 2 f_amount TEST.Amount%TYPE;
- 3 n_add NUMBER;
- 4 BEGIN
- 5
- 6 n_add:= 100; -- 增加的值
- 7
- 8 UPDATE TEST
- 9 SET amount = amount + n_add -- 充值
- 10 WHERE fid = 1
- 11 RETURNING amount INTO f_amount; -- update 后的值
- 12
- 13 dbms_output.put_line(f_amount); -- 目前值
- 14 dbms_output.put_line(f_amount - n_add); -- 原来值
- 15
- 16 END;
- 17 /
- 200.01
- 100.01
- PL/SQL procedure successfully completed
- SQL>
减少一次查询。(不过有人一定会说,客户号是主键,查一次很快的呀。,偶的观点依然是尽量减少对DB的操作....)