2017-09-18 90 views
0

我在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

回答

0

循環遍歷數組。不要使用回刻度。

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 
相關問題