在将 1 个字符变量从 sqlplus 传递到 shell 时,我发现了这个烦人的异常情况。
echo "Please enter the upgrade option: "
read type
if [[ "$type" != "1" ]] && [[ "$type" != "2" ]]
then
echo "You have entered an invalid response. Exiting."
exit 0;
fi
sql_result=$($ORACLE_HOME/bin/sqlplus -s /nolog <<-EOF
connect $eval_user/$eval_pass@$db_name
SPOOL results.txt;
WHENEVER OSERROR EXIT 9;
DEFINE vType = '$type'
DEFINE type_flag = '$t_flag'
DEFINE vOrigowner = '$origOwner'
@@EV_DBUPGRADE.sql '&vType' '&vOrigowner' '&vAppConvFromDt' '&vAppConvThruDt' '&vAppConvStatusFlg' '&type_flag'
在 EV_DBUPGRADE.sql 下,我在使用变量 vType 时发现了这个错误:
vOption varchar2(1) := UPPER('&1');
我收到这个抱怨缓冲区长度的烦人错误
declare
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 7
如果使用 varchar2(10),则不会发生错误。但是,我不想在一百万个不同的地方改变它。反正有限制吗?谁能告诉我如何在 BEGIN 之外的 sqlplus 中打印调试消息?