在 Oracle 触发器代码中使用“exec”并失败

xiang Gao

我尝试创建一个 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

然后我使用 sys 登录 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 能够独立运行,我如何使用它?plz

不再

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

创建Oracle序列触发器

来自分类Dev

oracle触发器选择更新的行

来自分类Dev

Oracle PL / SQL约束触发器

来自分类Dev

Oracle使用表触发器在触发器内部合并

来自分类Dev

在Oracle中创建触发器

来自分类Dev

Oracle触发器ORA-04098:触发器无效且重新验证失败

来自分类Dev

在INSERT触发器之前使用IF EXISTS(SELECT ...)(Oracle)

来自分类Dev

Oracle触发器删除IP

来自分类Dev

插入或删除后Oracle触发器

来自分类Dev

Oracle触发器允许查看DML

来自分类Dev

Oracle触发器不会更新

来自分类Dev

在Oracle中使用触发器将列值设置为等于另一列

来自分类Dev

禁用触发器语法(Oracle)

来自分类Dev

Oracle SQL使用触发器检查重叠的日期

来自分类Dev

此Oracle触发器有问题

来自分类Dev

Oracle触发器中的RTTI

来自分类Dev

如何编译ORACLE触发器

来自分类Dev

使用Oracle Forms(4.5),do_key commit_form会触发哪个触发器,它的代码在哪里?

来自分类Dev

如何使用触发器在Oracle中创建镜像表?

来自分类Dev

在INSERT触发器之前使用IF EXISTS(SELECT ...)(Oracle)

来自分类Dev

Oracle触发器更改值

来自分类Dev

Oracle:禁用触发器内的约束

来自分类Dev

Oracle触发器实现

来自分类Dev

在Oracle SQL中使用触发器时出错

来自分类Dev

Oracle SQL触发器

来自分类Dev

多次触发后,Oracle触发器失败

来自分类Dev

删除触发器中引发错误的代码oracle

来自分类Dev

Oracle - 触发器错误

来自分类Dev

在oracle中使用触发器更改日期的问题