我正在尝试在oracle触发器中运行.exe
文件。
我在插入表后运行oracle数据库触发器,我需要通过这个触发器通过这个触发器运行外部程序(exe
),如下所示:
我正在尝试此代码,但它不起作用
create or replace TRIGGER GE_MAIN_NOTIFICATION_SEND AFTER INSERT ON TABLE
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
SYS.DBMS_SCHEDULER.create_program(
program_name => 'UPLOADNC',
program_type => 'EXECUTABLE',
program_action => 'C:\WINDOWS\SYSTEM32\CMD.exe /C c:\my_external_apps\app1.exe',
enabled => TRUE);
END;
这是错误......如何解决
ORA-27486: insufficient privileges
ORA-06512: at "SYS.DBMS_ISCHED", line 5
ORA-06512: at "SYS.DBMS_SCHEDULER", line 36
ORA-06512: at "TEST.GE_MAIN_NOTIFICATION_SEND", line 2
ORA-04088: error during execution of trigger 'TEST.GE_MAIN_NOTIFICATION_SEND'
答案 0 :(得分:0)
对DBMS_SCHEDULER的调用将尝试提交,因此除非您使用自治事务,否则将无法在触发器内部工作。它很难看,但您可以创建一个调用shell命令/可执行文件的Java存储过程。
有一个完整的例子:
https://oracle-base.com/articles/8i/shell-commands-from-plsql
但是,如果可能的话,我建议您使用直接PL / SQL作为通知(如果您正在执行类似发送短信的操作,可能会调用Web API)。