gpt4 book ai didi

sql - Oracle 触发器 : Declare global variable

转载 作者:行者123 更新时间:2023-12-04 19:54:04 25 4
gpt4 key购买 nike

我有一个表,我已经为它写了一个触发器:

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;

当我更新时 EMPLOYEE表触发器工作正常。但是 v_array数组不是存储数据吗?有人可以帮忙吗?

最佳答案

声明 v_array在一个包中,如果你想让它成为全局的(对于一个 session ——每个 session 都有自己的变量副本)。

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;

对于多 session 全局变量,使用关系表(具有适当的多用户锁定)。

关于sql - Oracle 触发器 : Declare global variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5025692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com