在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"
答
循环遍历数组。不要使用回刻度。
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
不是围绕您的变量反引号,而是dbl-quotes,即。 'SPOOL/data2/interfaces/scripts /“$ table_nm”.CSV;'。嗯,或者当你在这里的文档里,你甚至不需要dbl引号(或者他们可能会导致问题,坚持使用没有空格的变量的值; - !)。祝你好运。 – shellter