0

我试图在运行时在 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/$PASSWORD@$SERVICE_NAME <<EOF
$OUT_DECLARE_STRING
exec $OWNER.$PROCEDURE_NAME($I_PARAMETER,$O_PARAMETER);
select $OUTPUT from dual;
COMMIT;
EXIT;
EOF`

我收到错误消息:

用法:VAR[IABLE] [ [ 数字 | 字符 | 字符 (n [字符|字节]) | VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) | NVARCHAR2 (n) | CLOB | NCLOB | 斑点 | BFILE REFCURSOR | BINARY_FLOAT | BINARY_DOUBLE ] ] SP2-0552:未声明绑定变量“O_OUTSUMMARYDATE”。

有人可以帮我解决这个问题。

4

1 回答 1

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`
于 2013-10-08T07:03:23.593 回答