在oracle触发器中运行exe文件

时间:2017-08-16 06:13:19

标签: oracle triggers

我正在尝试在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'

1 个答案:

答案 0 :(得分:0)

对DBMS_SCHEDULER的调用将尝试提交,因此除非您使用自治事务,否则将无法在触发器内部工作。它很难看,但您可以创建一个调用shell命令/可执行文件的Java存储过程。

有一个完整的例子:

https://oracle-base.com/articles/8i/shell-commands-from-plsql

但是,如果可能的话,我建议您使用直接PL / SQL作为通知(如果您正在执行类似发送短信的操作,可能会调用Web API)。