2017-09-18 8 views
0

私は35個のテーブルのsqlクエリを実行し、出力をcsvファイルに持っていくUnixシェルスクリプトを作成します。私が思ったのは、配列を作成し、forループを使用して、テーブル名をSQLクエリに渡します。サンプルとして、SQLクエリで変数としてテーブル名を渡そうとしています。 私はテーブル名を渡しているだけでなく、私が作成したCSVのSQLクエリです。 しかし、動作していません。お手数です...Unixシェルスクリプト内の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-quotesを必要としなくてもよい(あるいは問題を引き起こすかもしれない。がんばろう。 – 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 
関連する問題