2013-04-17 1 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

Hi Aditya , Я думаю, что я пробовал это так же хорошо, но это не сработало. Единственное, что, похоже, выполняет эту работу: – jlnme

+0

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