问题描述
我写了一个shell脚本,它将调用两个plsql过程,
首先我已经连接到sqlplus,然后我将调用一个块内部的plsql,用于声明变量来传递过程的参数。在这个块内部我已经提到了dbms output enable和dbms output.print以查看过程的结果
之后,根据plsql内部的错误代码输出,我将其视为成功或declin。
然后,在shell脚本中,我将声明另一个块来调用另一个plsql过程,就像第一个过程一样。
问题是甚至shell没有回响味精或dbms输出没有打印
第一个过程需要4个小时才能完成 (如果我手动运行)。第二个过程只需要3分钟。
我已经将这个shell脚本安排为Linux中的cronjob。
如果我更改顺序,例如首先是3分钟程序,然后是4小时程序
该脚本正在回响dbms输出和成功msg。
第二次什么也没发生
没有dbms输出,甚至没有脚本回显。
注意: 我已经给出了dbms输出大小作为100000
而且,如果我手动执行脚本,则可以正常工作,并将所有dbms和脚本msg回声到cron日志中
我在crontab命令中提到过
帮我一下。
===========================
程序是,
首先我已经连接到sqlplus,然后我将调用一个块内部的plsql,用于声明变量来传递过程的参数。在这个块内部我已经提到了dbms output enable和dbms output.print以查看过程的结果
之后,根据plsql内部的错误代码输出,我将其视为成功或declin。
然后,在shell脚本中,我将声明另一个块来调用另一个plsql过程,就像第一个过程一样。
问题是甚至shell没有回响味精或dbms输出没有打印
第一个过程需要4个小时才能完成 (如果我手动运行)。第二个过程只需要3分钟。
我已经将这个shell脚本安排为Linux中的cronjob。
如果我更改顺序,例如首先是3分钟程序,然后是4小时程序
该脚本正在回响dbms输出和成功msg。
第二次什么也没发生
没有dbms输出,甚至没有脚本回显。
注意: 我已经给出了dbms输出大小作为100000
而且,如果我手动执行脚本,则可以正常工作,并将所有dbms和脚本msg回声到cron日志中
我在crontab命令中提到过
帮我一下。
===========================
程序是,
#!/bin/bash org="'0001'" upd="'Y'" ORACLE_HOME=/oracle/app/12.1.0.2/client_1/ ; export ORACLE_HOME PATH=/usr/bin/gcc//:/usr/local/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr1/UBCEOD/.local/bin:/usr1/UBCEOD/bin:/oracle/app/12.1.0.2/client_1/bin/:/usr1/UBCEOD/bin:/oracle/app/12.1.0.2/client_1/bin/ ; export PATH CONNECT=INTELLECTCARDS/INTELLECTCARDS@UBCCARDS; export CONNECT #ORACLE_HOME=/oracle/app/product/12.1.0.2.0_32bitclint/; export ORACLE_HOME #PATH=/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr1/SIR14234/bin:/oracle/app/product/12.1.0.2.0_32bitclint/bin ; export PATH #CONNECT=INTELLECTCARDS/INTELLECTCARDS@SIR14235; export CONNECT check_date=`sqlplus -s $CONNECT <> /usr1/UBCEOD/prod/JOB_CHECK/chk_otb.log 复制
专家解答
抱歉-我不明白这是怎么回事:
output_calc=`sqlplus -s $CONNECT <
您的dbms_output将返回一些文本 (“txt outout .....”)
那怎么会是 “00” 呢?
我不是 “var = 'sqlplus command'” 风格的编码的忠实粉丝,因为它过于严格。它还有更多的工作,但是看看假脱机和greping,例如print " connect user/pass set serverout on select .... exec my_proc ... 等等" | sqlplus /nolog 1>/tmp/output.$$ 2>&1
以便捕获所有输出,然后查找变量的特定前缀。例如,您的proc可能会这样做:
dbms_output.put_line('结果 =' | | 结果);
然后在你的脚本中,你会有:res=`grep ^RESULT= /tmp/output.$$ | awk -F= '{print $2}'`
或者类似的。这也打开了更好的错误检测,例如if [ "`grep ORA- /tmp/output.$$`" ] ; then mailx -s "AGGGGH" connor@support.com < /tmp/output.$$ exit 1 fi
等等
复制
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
571次阅读
2025-04-15 17:24:06
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
513次阅读
2025-04-18 14:18:38
Oracle SQL 执行计划分析与优化指南
Digital Observer
475次阅读
2025-04-01 11:08:44
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
462次阅读
2025-04-08 09:12:48
墨天轮个人数说知识点合集
JiekeXu
462次阅读
2025-04-01 15:56:03
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
444次阅读
2025-04-22 00:20:37
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
444次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
421次阅读
2025-04-22 00:13:51
Oracle 19c RAC更换IP实战,运维必看!
szrsu
406次阅读
2025-04-08 23:57:08
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
391次阅读
2025-04-17 17:02:24