在Unix shell脚本中将表名称作为sql查询中的变量Solaris

问题描述:

我在solaris中创建了一个Unix shell脚本,其中我的任务是为35个表运行sql查询并将输出带到csv文件中。我认为我会创建一个数组,并通过使用for循环,我会将表名一个接一个地传递给sql查询。所以作为示例,我试图在sql查询中将表名称作为变量传递。 我传递表名是sql查询以及我创建的CSV。 但不working.Please帮助....在Unix shell脚本中将表名称作为sql查询中的变量Solaris

table_nm="PRODUCT" 

sqlplus -s admin/[email protected] <<EOF 
SPOOL /data2/interfaces/scripts/`$table_nm`.CSV; 
set colsep , 
set feedback off 
set trimspool on 
set linesize 5000 
set pagesize 1000 
set heading on 
set term off 
set verify off 
set timing off 
set echo off 
select * from `$table_nm` where PROD_ID = '1618' AND PROD_SER_NUM = 21 ; 
spool off; 
EXIT; 
EOF 
echo "end" 
+0

不是围绕您的变量反引号,而是dbl-quotes,即。 'SPOOL/data2/interfaces/scripts /“$ table_nm”.CSV;'。嗯,或者当你在这里的文档里,你甚至不需要dbl引号(或者他们可能会导致问题,坚持使用没有空格的变量的值; - !)。祝你好运。 – shellter

循环遍历数组。不要使用回刻度。

tablearry=(PRODUCT SALES EMPLOYEES) 


for i in "${tablearry[@]}" 
do 
    table_nm=$i 

sqlplus -s admin/[email protected] <<EOF 
SPOOL /data2/interfaces/scripts/${table_nm}.CSV; 
set colsep , 
set feedback off 
set trimspool on 
set linesize 5000 
set pagesize 1000 
set heading on 
set term off 
set verify off 
set timing off 
set echo off 
select * from ${table_nm} where PROD_ID = '1618' AND PROD_SER_NUM = 21 ; 
spool off; 
EXIT; 
EOF 
echo "end" 


done