Zec*_*eck 4 sql oracle triggers oracle10g
我有一个表,我已经写了一个触发器:
CREATE OR REPLACE TRIGGER EMPLOYEE_TRG
AFTER INSERT OR DELETE OR UPDATE ON EMPLOYEE
FOR EACH ROW
DECLARE
TYPE arr IS TABLE OF VARCHAR2(32) INDEX BY PLS_INTEGER;
v_array arr;
BEGIN
IF UPDATING THEN
DBMS_OUTPUT.PUT_LINE('NEW DATA: ' || :new.NAME || ', OLD DATA: ' || :old.NAME);
DBMS_OUTPUT.PUT_LINE('ID: ' || :new.P_ID);
v_array(:new.P_ID) := :new.NAME;
DBMS_OUTPUT.PUT_LINE('COUNTER: ' || v_array.COUNT); -- DISPLAY COUNTER: 1
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
当我更新EMPLOYEE
表触发器的工作正常.但是v_array
数组不是存储数据?有人可以帮忙吗?
v_array
如果要将其设置为全局(在会话中 - 每个会话将拥有自己的变量副本),则在包中声明.
CREATE OR REPLACE PACKAGE my_global_pkg IS
TYPE arr IS TABLE OF VARCHAR2(32) INDEX BY PLS_INTEGER;
g_array arr;
END my_global_pkg;
CREATE OR REPLACE TRIGGER EMPLOYEE_TRG
AFTER INSERT OR DELETE OR UPDATE ON EMPLOYEE
FOR EACH ROW
BEGIN
IF UPDATING THEN
DBMS_OUTPUT.PUT_LINE('NEW DATA: ' ||:new.NAME ||', OLD DATA: '||:old.NAME);
DBMS_OUTPUT.PUT_LINE('ID: ' || :new.P_ID);
my_global_pkg.g_array(:new.P_ID) := :new.NAME;
DBMS_OUTPUT.PUT_LINE('COUNTER: ' || my_global_pkg.g_array.COUNT);
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
对于多会话全局变量,请使用关系表(具有适当的多用户锁定).
归档时间: |
|
查看次数: |
9178 次 |
最近记录: |