4
오라클 저장 프로 시저에서 트리거를 일시적으로 비활성화 할 수 있습니까?오라클 저장 프로 시저에서 트리거를 일시적으로 비활성화 할 수 있습니까?
예 (의사) 미리
MyProcedure{
disable MyTrigger;
//doStuff
enable MyTrigger;
};
THX. 주세페
오라클 저장 프로 시저에서 트리거를 일시적으로 비활성화 할 수 있습니까?오라클 저장 프로 시저에서 트리거를 일시적으로 비활성화 할 수 있습니까?
예 (의사) 미리
MyProcedure{
disable MyTrigger;
//doStuff
enable MyTrigger;
};
THX. 주세페
EXECUTE IMMEDIATE 구문을 사용하여 동적 SQL을 통해 "ALTER TRIGGER"문과 같은 DDL을 실행할 수 있습니다.
그 설명은 여기에 있습니다 :
PROCEDURE myProcedure
IS
v_triggername VARCHAR2(30) := 'triggername';
BEGIN
EXECUTE IMMEDIATE 'ALTER TRIGGER '||v_triggername||' DISABLE';
-- Do work
EXECUTE IMMEDIATE 'ALTER TRIGGER '||v_triggername||' ENABLE';
EXCEPTION
WHEN OTHERS
THEN
-- Handle Exceptions
END myProcedure;
당신이 다음 이렇게하면 당신은 또한해야한다 : 만약 당신이 좋아하면 http://download.oracle.com/docs/cd/B12037_01/appdev.101/b10807/13_elems017.htm
PROCEDURE myProcedure
IS
BEGIN
EXECUTE IMMEDIATE 'ALTER TRIGGER triggername DISABLE';
-- Do work
EXECUTE IMMEDIATE 'ALTER TRIGGER triggername ENABLE';
EXCEPTION
WHEN OTHERS
THEN
-- Handle Exceptions
END myProcedure;
당신은 너무 VARCHAR 변수를 사용하여 동적 SQL을 구축 할 수 있습니다 트리거 DBMS_ASSERT 패키지를 조사하여 트리거 이름을 랩핑하고 SQL 주입 공격으로부터 코드를 강화하십시오.
정확히 내가 원하는 것입니다. 너! – Giuseppe
기꺼이 도와 드리겠습니다. – Ollie
@giuseppe주의 사항 : 트리거를 변경하면 ddl -> 커밋됩니다. –