SQL*Plusで実行したSQLの結果をそのままSQL*Plusの終了コードとして(シェルでは $? で)取得する事ができます。実務ではバッチ処理をストアドプロシージャで書いて、プロシージャの終了ステータスをシェルへ戻す場合に使っています。ポイントは、プロシージャ内で定義した変数値を、SQL*Plusを抜ける時に利用するexitコマンドに設定する事です。(注意点としてこちらは数字のみ指定可能です)
#!/bin/bash DB_USER=sooni DB_PASS=sooni DB_HOST=vm013 DB_PORT=1521 DB_SERVICE_NAME=orau8 sqlplus -s ${DB_USER}/${DB_PASS}@${DB_HOST}:${DB_PORT}/${DB_SERVICE_NAME} <<EOF set feedback off set serveroutput on var rsts NUMBER; declare begin select 10 into :rsts from dual; dbms_output.put_line('rsts:'||:rsts ); end; / exit :rsts; EOF res=$? echo "返却値:${res}" exit ${res}
以下は上記内容を test01.shに保存して実行した結果です。
vi test01.sh
[dabada@vm013 ~]$ ./test01.sh
[dabada@vm013 ~]$ chmod 777 ./test01.sh
rsts:10
返却値:10
[dabada@vm013 ~]$ echo $?
10
[dabada@vm013 ~]$
以前SQLファイルを使ったサンプルを投稿していました。こちらも参考になればどうぞ。