我试图在运行时在unix中声明sqlplus中的几个变量,但字符串是单行并导致错误。我需要字符串是多行字符串
代码段:
#this string is generated at runtime
OUT_DECLARE_STRING="variable IO_TABLE_NAME varchar2(4000); variable O_NROFROWS varchar2(4000); variable O_OUTPUTSTATUS varchar2(4000); variable O_OUTPUTMESSAGE varchar2(4000); variable O_OUTSUMMARYDATE varchar2(4000); variable O_SORT_ORDER varchar2(4000); variable O_RECORD_LIMIT varchar2(4000); variable O_SELECTED_COLUMNS varchar2(4000);"
现在我将此OUT_DECLARE_STRING作为
传递给sqlplusQUERY_RESULT=`sqlplus -s $USER_NAME/$PASSWORD@$SERVICE_NAME <<EOF
$OUT_DECLARE_STRING
exec $OWNER.$PROCEDURE_NAME($I_PARAMETER,$O_PARAMETER);
select $OUTPUT from dual;
COMMIT;
EXIT;
EOF`
我收到的错误是:
用法:VAR [IABLE] [[NUMBER | CHAR | CHAR(n [CHAR | BYTE])| VARCHAR2(n [CHAR | BYTE])| NCHAR | NCHAR(n)| NVARCHAR2(n)| CLOB | NCLOB | BLOB | BFILE REFCURSOR | BINARY_FLOAT | BINARY_DOUBLE]] SP2-0552:未声明绑定变量“O_OUTSUMMARYDATE”。
有人可以帮助我。
答案 0 :(得分:0)
使用awk按';'分割字符串分隔器。 FS是现场分隔符。 NF是字段数。 $ i是特殊领域。
OUT_DECLARE_STRING=$(echo $OUT_DECLARE_STRING | awk 'BEGIN {FS=";"} {for (i=0; i<NF; i+=1) print $i ";"}')
QUERY_RESULT=`sqlplus -s $USER_NAME/$PASSWORD@$SERVICE_NAME <<EOF
$OUT_DECLARE_STRING
exec $OWNER.$PROCEDURE_NAME($I_PARAMETER,$O_PARAMETER);
select $OUTPUT from dual;
COMMIT;
EXIT;
EOF`