2013-04-17 34 views
0

有沒有辦法在Oracle中執行觸發器內的GRANT someRole TO someUser;命令?
我試過了,但它似乎沒有工作。GRANT ROLE在觸發器內?

非常感謝。

+1

爲什麼你想這樣做嗎? – Woot4Moo

+0

想到一個LOGON觸發器。 – jlnme

+0

我還沒有嘗試過,但可能通過'EXECUTE IMMEDIATE'? –

回答

0

大多數DDL語句不允許在觸發器中使用,因爲它們強制執行COMMIT。此規則的少數例外情況僅適用於系統事件觸發器(啓動,關閉等),但未出現此觸發器是系統觸發器。參考here

分享和享受。

0

建議不要在觸發器內使用DDL命令,因爲提交事務並且如果出現錯誤,您無法回滾事務。如果它非常重要,你必須這樣做,那麼只有你應該在觸發器內執行DDL命令。也許你可以使用自主事務來實現它。

下面是一個例子=

CREATE OR REPLACE TRIGGER my_trigger 
    AFTER INSERT ON my_table 
    DECLARE 
    PRAGMA AUTONOMOUS_TRANSACTION; 
    BEGIN 
    EXECUTE IMMEDIATE 'GRANT someRole TO someUser'; 
    COMMIT; 
    END; 

請讓我知道這是否爲你的作品。

感謝, 阿迪亞

+0

嗨Aditya ,我認爲我也是這樣做的,但它並沒有工作。似乎做這項工作的唯一一件事是: – jlnme

+0

DBMS_JOB.submit(jobNumber,'someProcedure'); – jlnme