执行Oracle的insert或update语句时同时返回插入或更新后的字段值
出处: http://wxy0327.itpub.net/post/16888/94033
这是一个很有用并常用的语法,可以少一次查询。
insert:
CREATE SEQUENCE seq_emp;
SET SERVEROUTPUT ON
DECLARE x emp.empno%TYPE; BEGIN INSERT INTO emp (empno, ename) VALUES (seq_emp.NEXTVAL, 'Morgan') RETURNING empno INTO x;
dbms_output.put_line(x); END; /
DECLARE x urowid; BEGIN INSERT INTO emp (empno, ename) VALUES (seq_emp.NEXTVAL, 'Morgan') RETURNING rowid INTO x;
dbms_output.put_line(x); END; /
update:
conn hr/hr
var bnd1 NUMBER var bnd2 VARCHAR2(30) var bnd3 NUMBER
UPDATE employees SET job_id ='SA_MAN', salary = salary + 1000, department_id = 140 WHERE last_name = 'Jones' RETURNING salary*0.25, last_name, department_id INTO :bnd1, :bnd2, :bnd3;
print bnd1 print bnd2 print bnd3 conn hr/hr
variable bnd1 NUMBER
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 100 RETURNING SUM(salary) INTO :bnd1;
print bnd1