SQL*PlusでSQLを実行結果をShellの変数に入れる方法。
意外と忘れるので自身のブログに乗せておこう。
目次
SQLの結果を変数に格納
サンプル
↓がサンプルです。
variable=`sqlplus -s / as sysdba << EOF
set head off;
select 列名 from 表名;
exit;
EOF
`
気を付けることは、インデントを揃えずに左詰にすることです。
では、これを使ってサンプルを書いてみましょう。
#!/bin/sh
variable=`sqlplus -s / as sysdba << EOF
set head off;
select sys_context('USERENV','MODULE') from dual;
exit;
EOF
`
echo ${variable}
exit 0
実行ログ
↓が実行ログ。
$ cat ./get_sqlresult.sh
#!/bin/shvariable=`sqlplus -s / as sysdba << EOF
set head off;
select sys_context('USERENV','MODULE') from dual;
exit;
EOF
`
echo ${variable}
exit 0
$ ./get_sqlresult.sh
sqlplus@it-tnga-ap.jp.oracle.com (TNS V1-V3)
確かに結果を取得できています。 インデントをきれいにすると↓みたいにwarningが出力される。
$ cat get_sqlresult.sh
#!/bin/shvariable=`sqlplus -s / as sysdba << EOF
set head off;
select sys_context('USERENV','MODULE') from dual;
exit;
EOF`
echo ${variable}
exit 0
$ ./get_sqlresult.sh
./get_sqlresult.sh: line 11: warning: here-document at line 7 delimited by end-of-file (wanted `EOF')
sqlplus@it-tnga-ap.jp.oracle.com (TNS V1-V3)
でも結果はしっかり出力される。