#!/bin/sh table_name='v$session' sql_select="select username from $table_name where username is not null;" set_format='set newpage none set feed off set line 1000 set trims on' ( echo "conn / as sysdba" echo "${set_format}" echo "${sql_select}" ) | sqlplus -s /nolog
シェルスクリプト
[シェル作成時のチェック]
- sqlplusのコネクションは何度も行わない
- 日付/時間の挿入
- SQL部分のコメントは"--"とする("#"だと実行されてしまう)
- 整形関連
- set head off : 列ヘッダー削除
- set newpage none: 1行目の表示間隔を除去
- set feed off : 問い合わせ結果の改行を除去
- set trims on:ファイルに余白の空白文字を出力しない
- set line 1000:1行の表示文字数(折り返しまでの制限文字数)を大きめにセット
■ヒアドキュメントを利用
[基本編]
ここからコピーした...
#!/bin/sh table_name=dual sql_select=select sysdate from $table_name;" exec_query () { local _result_set='' local _query="${1}" _result_set="`sqlplus -s /nolog << EndOfSQL conn scott/tiger $_query exit EndOfSQL`" } exec_query $sql_select
[修正版]
エラーチェックや関数化...
#!/bin/sh table_name='dual' user='scott' passwd='tiger' sql_select="select sysdate from $table_name;" _is_success () { # 引数存在チェック if [ ! " ${_query}" ]; then echo "sqlが指定されていません。(_is_success)" return 1 fi # ORAが含まれるかをチェック echo "${_query}" | grep -q 'ORA' && return 1 # 正常 return 0 } exec_query () { local _result_set='' local _query="${1}" local _set_format='set newpage none set feed off set line 1000 set trims on' # 引数存在チェック if [ ! " ${_query}" ]; then echo "sqlが指定されていません。(exec_query)" exit 1 fi _result_set="$(sqlplus -s /nolog << EndOfSQL conn ${user}/${passwd} ${_set_format} ${_query} exit EndOfSQL)" if [ "${_query}" ]; then _is_success $_query || (echo "SQL失敗:${_result_set}"; exit 1) fi # 結果を出力 echo "${_result_set}" } result=$(exec_query "${sql_select}") echo "${result}"
■echoコマンドを利用
若干、読みやすくなった?
#!/bin/sh table_name='dual' user='scott' passwd='tiger' sql_select="select sysdate from $table_name;" _is_success () { # 引数存在チェック if [ ! " ${_query}" ]; then echo "sqlが指定されていません。(_is_success)" return 1 fi # ORAが含まれるかをチェック echo "${_query}" | grep -q 'ORA' && return 1 # 正常 return 0 } exec_query () { local _result_set='' local _query="${1}" local _set_format='set newpage none set feed off set line 1000 set trims on' # 引数存在チェック if [ ! " ${_query}" ]; then echo "sqlが指定されていません。(exec_query)" exit 1 fi ( echo "conn ${user}/${passwd}" echo "${_set_format}" echo "${_query}" ) | sqlplus -s /nolog # TODO: # 「sqlplus -s /nolog >> ファイル名 」としてファイル内にORAが含まれるか # エラーチェックする。 #if [ "${_query}" ]; then # _is_success $_query || (echo "SQL失敗:${_result_set}"; exit 1) #fi # 結果を出力 #echo "${_result_set}" } exec_query "${sql_select}" #echo "${result}"
プロフィール
edworld
カテゴリ別アーカイブ
人気記事
記事検索
アクセスカウンター
- 今日:
- 昨日:
- 累計: