oracle触发器字段值变化,ORACLE 触发器通过更新列值来找到相应的字段值
各位:正如标题所说:以下是本人写的代码:但有错CREATE OR REPLACE TRIGGER T_GetOutLetVarierryBEFORE UPDATE ON ALL_TBSJFOR EACH ROWDECLAREOLD_Value VARCHAR2(500);Total_ROWS INT;V_SQL_OldVavlus VARCHAR2(100);V_SQL VARCHAR2(100)
各位:
正如标题所说:
以下是本人写的代码:但有错
CREATE OR REPLACE TRIGGER T_GetOutLetVarierry
BEFORE UPDATE ON ALL_TBSJ
FOR EACH ROW
DECLARE
OLD_Value VARCHAR2(500);
Total_ROWS INT;
V_SQL_OldVavlus VARCHAR2(100);
V_SQL VARCHAR2(100);
CURSOR Select_Column IS
SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'ALL_TBSJ';
CURSOR_COLUMNS USER_TAB_COLUMNS.COLUMN_NAME%TYPE;
OPEN Select_Column;
FETCH Select_Column INTO CURSOR_COLUMNS;
WHILE Select_Column %FOUND LOOP
-- V_SQL_OldVavlus := 'SELECT :OLD.'||CURSOR_COLUMNS||' INTO OLD_Value FROM DUAL'; --fetch the old data for change column
DBMS_OUTPUT.PUT_LINE(':OLD.'||CURSOR_COLUMNS)
EXECUTE IMMEDIATE V_SQL_OldVavlus;
SELECT COUNT(*) INTO Total_ROWS FROM ALL_TBSJ WHERE COLUMN_NAME = OLD_Value;---judgment the old_Value in which Column
IF Total_ROWS >= 1 THEN
V_SQL := 'INSERT INTO CC (COLUMN_S,OLDDATA,NEWDATA) VALUES (';
V_SQL := V_SQL ||CURSOR_COLUMNS||',:OLD.'||CURSOR_COLUMNS||',:NEW.'||CURSOR_COLUMNS||')';
EXECUTE IMMEDIATE V_SQL;
END IF;
FETCH Select_Column INTO CURSOR_COLUMNS;
END LOOP;
CLOSE Select_Column;
-- COMMIT;
--EXCEPTION
-- WHEN OTHERS THEN
-- NULL;
END T_GetOutLetVarierry;
报错:并非所有的变量都也关联
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)