我有两个实例正在执行相同的查询,因此两个实例都会选择相同的记录,因为状态未更新为“正在进行中”。
所以我尝试先更新记录,然后返回原因返回更新的行。但是我必须创建变量来执行此操作,并且无法在没有连接的情况下传递多行。
但我希望同时返回行的所有列和多行。
有没有更好的方法来做同样的事情。
答案 0 :(得分:1)
您可以对集合使用RETURNING BULK COLLECT INTO
子句来返回所有更新的行和列。
这是一个例子。
SET SERVEROUTPUT ON
DECLARE
TYPE emptab IS TABLE OF EMP%ROWTYPE;
v_emp emptab;
BEGIN
UPDATE EMP
SET EMP_PROJECT = 'RISK_' || EMP_PROJECT,
EMP_SAL = EMP_SAL * 1.5
RETURNING EMP_ID,
EMP_NAME,
EMP_SAL,
EMP_GRADE,
EMP_JOINING_DATE,
EMP_PROJECT,
DEPT_ID
BULK COLLECT INTO v_emp;
FOR i IN v_emp.FIRST .. v_emp.LAST
LOOP
DBMS_OUTPUT.PUT_LINE (
'EMP_ID :'
|| v_emp (i).EMP_ID
|| ' PROJECT :'
|| v_emp (i).EMP_PROJECT
|| ' SALARY :'
|| v_emp (i).EMP_SAL);
END LOOP;
END;
/
<强> O / P 强>
EMP_ID :3 PROJECT :RISK_ESP
SALARY :168.75
EMP_ID :4 PROJECT :RISK_STARS
SALARY :225
EMP_ID :7 PROJECT :RISK_ERM
SALARY :393.75
EMP_ID :8 PROJECT :RISK_SLD
SALARY :450