2013-10-08 28 views
0

我想在運行時在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」。

有人可以幫我解決這個問題。

回答

0

使用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`