2011-09-07 57 views

回答

8

您可以使用EXECUTE IMMEDIATE語法通過動態SQL發出DDL,例如「ALTER TRIGGER」語句。

那說明是在這裏: 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太多,如果你喜歡:

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; 

如果你這樣做,那麼你也應該查看包DBMS_ASSERT來包裝觸發器名稱,並幫助強化您的代碼以防SQL注入攻擊。

+0

這正是我想要的。 thx男人! – Giuseppe

+0

很高興我能幫到你。 – Ollie

+10

@giuseppe要小心:修改觸發器是ddl - >它會提交。 –

相關問題