将多行字符串传递给unix中的sqlplus
问题描述:
我想在运行时在unix中声明sqlplus中的几个变量,但字符串在单行中并导致错误。我需要的字符串是多线串将多行字符串传递给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为sqlplus,作为
QUERY_RESULT=`sqlplus -s $USER_NAME/[email protected]$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”。
有人可以帮我解决这个问题。
答
使用awk分割字符串';'分隔器。 FS是现场分离器。 NF是田地计数。 $我是特定的领域。
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/[email protected]$SERVICE_NAME <<EOF
$OUT_DECLARE_STRING
exec $OWNER.$PROCEDURE_NAME($I_PARAMETER,$O_PARAMETER);
select $OUTPUT from dual;
COMMIT;
EXIT;
EOF`