2011-09-07 4 views

답변

8

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 주입 공격으로부터 코드를 강화하십시오.

+0

정확히 내가 원하는 것입니다. 너! – Giuseppe

+0

기꺼이 도와 드리겠습니다. – Ollie

+10

@giuseppe주의 사항 : 트리거를 변경하면 ddl -> 커밋됩니다. –

관련 문제