0

我正在创建一个 shell 脚本,我将文本文件中的条目保存到数组中。这些值已正确存储并显示正确的内容。其中一个条目包含一个简单的查询,我想将它传递给一个 sql 文件。使用该 sql 查询,我想将结果保存到文本文件中。

下面是调用sql文件运行sql脚本的部分代码

PURGE_SITES=purge_site.txt
logmsg "USERID - $PURGES_SITE" n

QUERY=${Unix_Array[4]}


echo $QUERY
sqlplus -s $USER/$PASS <<EndSQL
     @purges_sites.sql $PURGE_SITES '$QUERY'
     EXIT SQL.SQLCODE
EndSQL

现在存储在 ${Unix_Array[4]} 中的查询是“select -1 from dual”

这是 .sql 文件的文件内容

set echo off ver off feed off pages 0

accept fname prompt 'Loading Sites...'

spool &1;
&2
/
spool off

它给了我错误并将 &2 读取为“&2”,而不是保存在变量中的查询。但是,当我编辑 .sql 文件并预先添加一些内容时,它将显示来自变量的正确数据。

这是输出

select -1 from dual
File Name===> results.txt
select -1 from dual
Loading Sites...SP2-0042: unknown command "&2" - rest of line ignored.
SP2-0103: Nothing in SQL buffer to run.

如果我在 &2 之前添加一些内容,这是输出。

select -1 from dual
File Name===> results.txt
select -1 from dual
Loading Sites...select * from table_table select -1 from dual
                          *
ERROR at line 1:
ORA-00933: SQL command not properly ended

我在 &2 之前输入了 select * from table_table。所以它实际上是从变量中检索值,但需要事先来一些东西才能正确传递。

oracle中是否有系统执行命令可以执行查询?&2 本身是不允许的。

4

1 回答 1

1

这对你有帮助吗?

PURGE_SITES=purge_site.txt
logmsg "USERID - $PURGES_SITE" n

QUERY=${Unix_Array[4]}


echo $QUERY
# FRAME YOUR QUERY, PROMPTING USER IN SHELL ITSELF AND SEND TO SQLPLUS DIRECTLY
# BEWARE SQL INJECTION POSSIBLE
# YOU CAN REDIRECT THE SQLPLUS OUTPUT TO A FILE LIKE THIS, NO SPOOL NEEDED
sqlplus -s $USER/$PASS <<EndSQL >> $OUTPUT_FILE
    set echo off ver off feed off pages 0
    $QUERY
    /
    EXIT SQL.SQLCODE
EndSQL
于 2013-12-31T03:15:38.740 回答