将多行字符串传递给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`