gpt4 book ai didi

linux - 在 Oracle 触发器代码中使用 'exec' 失败

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:12 24 4
gpt4 key购买 nike

我尝试创建一个 Oracle 触发器,在插入或更新表后,触摸 Linux 主机中的一个文件。

所以我创建了一个这样的 shell 脚本:

#!/bin/bash
sqlplus $oam <<EOF
spool /ocs/ocsrun/other/gx_working/select.txt;
@/ocs/ocsrun/other/gx_working/select.sql;
spool off;
exit;
EOF
touch /export/home/oracle/shell/a.txt

并修改权限:

chmod 777 test1.sh

然后我使用系统登录 oracle 并创建一个这样的调度程序作业:

SQL>  exec DBMS_SCHEDULER.CREATE_JOB(job_name=>'test1',job_type=>'EXECUTABLE',job_action=>'/export/home/oracle/shell/test1.sh');
PL/SQL procedure successfully completed.

现在我想创建一个 Oracle 触发器并像这样调用这个调度程序作业:

CREATE OR REPLACE TRIGGER MY_OAM_LOG
AFTER INSERT OR UPDATE ON OCS_CHARGE_OFF_AUTOMATION
FOR EACH ROW
BEGIN
DBMS_SCHEDULER.RUN_JOB(job_name=>'test1');
END;
/

当我更新这个表时,出现如下错误:

ERROR at line 1:
ORA-27369: job of type EXECUTABLE failed with exit code: No such file or
directory
ORA-06512: at "SYS.DBMS_ISCHED", line 185
ORA-06512: at "SYS.DBMS_SCHEDULER", line 486
ORA-06512: at "OAM.MY_OAM_LOG", line 2
ORA-04088: error during execution of trigger 'OAM.MY_OAM_LOG'

我从管理员指南中搜索了一些文档,例如 exapmle 27-5: http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/scheduse002.htm#i1032197

错误是一样的,在我改变我的 shell 脚本之后:

#!/bin/bash
export ORACLE_HOME=/opt/oracle/instantclient
export ORACLE_SID=ocsdb
sqlplus $oam <<EOF
spool /ocs/ocsrun/other/gx_working/select.txt;
@/ocs/ocsrun/other/gx_working/select.sql;
spool off;
exit;
EOF
touch /export/home/oracle/shell/a.txt

shell可以独立运行,请问如何兼用?

最佳答案

很可能找不到 sqlplus 命令,因为从 Oracle 数据库执行时,您丢失了所有环境设置。因此,在脚本的开头设置必要的路径或输入 sqlplus 等命令的完整路径。

关于linux - 在 Oracle 触发器代码中使用 'exec' 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42708996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com