sqlplus からシェルに 1 文字の変数を渡しているときに、この厄介な異常が見つかりました。
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 でデバッグ メッセージを出力する方法を教えてください。