日期:2014-05-17  浏览次数:20988 次

Oracle 行级触发器共享数据问题
以SCOTT方案为例,在EMP表上建立触发器
CREATE OR REPLACE TRIGGER emp_t1
BEFORE  INSERT OR UPDATE OF COMM ON EMP
FOR EACH ROW
  DECLARE
   str_empno VARCHAR2(400) := '';
   v_empno emp.empno%TYPE;
BEGIN
 v_empno := :NEW.EMPNO;
 str_empno := str_empno || ',' || TO_CHAR(v_empno);
 dbms_output.put_line(str_empno);
END;

想用变量str_empno来存储所有受影响的EMPNO,但是在行触发器中该变量不能共享。
UPDATE emp SET comm = NULL;
COMMIT;
输出:
,7369
,7499
,7521
,7566
,7654
,7698
,7782
,7788
,7839
,7844
,7876
,7900
,7902
,7934
如何让str_empno能共享最后的结果为:,7369,7499,7521,7566,7654,7698,7782,7788,7839,7844,7876,7900,7902,7934

------解决方案--------------------
FOR EACH ROW


你已经是行级了,怎么把多行记录更新输出在一起的呢。

“dbms_output.put_line(str_empno);”不输出,增加update,把str_empno保存在中间表中。