【发布时间】:2018-12-27 10:06:01
【问题描述】:
我正在尝试执行一个通过 sqlplus 调用 Merge 语句的脚本。
合并语句执行得很好,但是当我通过 shell 脚本执行它时,它给出了一个错误:
current_time=`date`
echo "FSG_PRCB_PRVD_FAC_SEQ table UPDATE STARTED at $current_time"
Result=`sqlplus -s $TgtUsrID/$TgtPswd@$TgtServer <<eof
whenever sqlerror exit sql.sqlcode;
merge into FSG_WRK.FSG_PRCB_FAC_REF_DATA T1
using
(select NUM_ID, ALPHA_NUM_ID from FSG.FSG_PRCB_ADDRESS_CROSSWLK) T2
ON (T1.ADDR_TYPE=T2.ALPHA_NUM_ID)
when matched then
update set T1.ADDR_TYPE_N = T2.NUM_ID ;
eof
`
ERRORCODE=$?
#Check the return code from SQL Plus
if [ $ERRORCODE != 0 ]
then
echo "********************"
echo "ERROR: Updating Status Failed. ErrorCode: $ERRORCODE"
exit -1
else
echo "********************"
echo "UUpdating Status returns $Result"
current_time=`date`
echo "Updating Status Query finished at $current_time"
fi
输出:
更新状态失败。错误代码:174
我不确定出了什么问题。
【问题讨论】:
-
$ERRORCODE值将被包装为$?的最大值为 255。因此 174 可能是很多实际值。在您的脚本中打印$Result以查看实际发生的情况。我想你实际上得到了 ORA-00942,它会包装到 174,所以检查你的表名和权限。 (另请注意,包装意味着您可能会在实际抛出错误时看到零,并错过它......所以这不是一个安全的检查。) -
@AlexPoole - 很好的信息。我不知道。