Oracle - 更新行并返回更新的行

时间:2018-02-21 10:02:21

标签: oracle plsql oracle11g

我有两个实例正在执行相同的查询,因此两个实例都会选择相同的记录,因为状态未更新为“正在进行中”。

所以我尝试先更新记录,然后返回原因返回更新的行。但是我必须创建变量来执行此操作,并且无法在没有连接的情况下传递多行。

但我希望同时返回行的所有列和多行。

有没有更好的方法来做同样的事情。

1 个答案:

答案 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