Oracle の検索結果をシェル変数として利用する方法

10年くらい前に日次バッチなどで重宝した Oracle の Select 結果を『`』(バッククォート)で括って、シェル変数に代入する方法です。『<< EOF』まで SQL*Plus 内部で実行され、その結果が SYSDATE 変数に代入されます。

# この機能の正式名称って知らないんですが・・・(汗)

余計な結果が入らないように SQL*Plus をサイレントモード(-s)で起動し、SQL*Plus 内部の各種表示も Off にしています。気をつけないといけない点として、cshksh では閉じる側の『`』の位置が違うところですね。

これを応用すると面倒な月末日の取得処理で 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