Oracle の検索結果をシェル変数として利用する方法
10年くらい前に日次バッチなどで重宝した Oracle の Select 結果を『`』(バッククォート)で括って、シェル変数に代入する方法です。『<< EOF』まで SQL*Plus 内部で実行され、その結果が SYSDATE 変数に代入されます。
# この機能の正式名称って知らないんですが・・・(汗)
余計な結果が入らないように SQL*Plus をサイレントモード(-s)で起動し、SQL*Plus 内部の各種表示も Off にしています。気をつけないといけない点として、csh と ksh では閉じる側の『`』の位置が違うところですね。
これを応用すると面倒な月末日の取得処理で Oracle 側の ADD_MONTHS 関数や LAST_DAY 関数が利用できてかなり便利です。(^o^)/
- csh の場合
#!/bin/csh set SYSDATE=`sqlplus -s system/manager` << EOF set feedback off; set echo off; set flush off; set head off; select sysdate from dual; EOF echo $SYSDATE exit 0
- ksh の場合
#!/bin/ksh SYSDATE=`sqlplus -s system/manager << EOF set feedback off; set echo off; set flush off; set head off; select sysdate from dual; EOF` echo $SYSDATE exit 0