트리거 내에서 테이블의 모든 열을 반복하고 새로운 값을 이전 값과 비교하려고합니다.오라클 PL/SQL : 루프 트리거 트리를 동적으로
이CREATE OR REPLACE TRIGGER "JOSH".TEST#UPD BEFORE
UPDATE ON "JOSH"."TEST_TRIGGER_TABLE" REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
declare
oldval varchar(2000);
newval varchar(2000);
begin
for row in (SELECT column_name from user_tab_columns where table_name='TEST_TRIGGER_TABLE') loop
execute immediate 'select :old.'||row.column_name||' from dual' into oldval;
execute immediate 'select :new.'||row.column_name||' from dual' into newval;
--Do something here with the old and new values
end loop;
end;
트리거가 컴파일하지만 트리거 화재, 내가 받고있을 때 :
바인딩 처음에는ORA-01008를 : 여기에 지금까지 무엇을 가지고 모든 변수
:old
에 대한 값을 기대하기 때문에 즉시 실행됩니다.
:old
및
:new
은 이미 트리거의 일부로 정의되어 있지만 즉시 실행은 해당 변수를 볼 수 없습니다.
트리거의 열 값을 동적으로 반복하는 방법이 있습니까?
: 이전 및 : 새 키워드는 트리거가 각 행에 대해 지정하는 경우에만 사용할 수 있습니다. – Powerlord
오른쪽 "FOR EACH ROW"가 지정됩니다. 문제는 동적 SQL 문에서 참조하려고한다는 것입니다. –
혼란을 피하기 위해 트리거를 생성하는 데 사용하는 전체 DDL을 추가했습니다. –