Oracleの簡単なSQLを実行するBashのシェルスクリプトを今年になってからいろんなところで書くので自分用のテンプレート
ちょっとした確認用のSQLを実行するのにSQL Developerを立ち上げるのが重いというのもあり、よく実行するものはシェルスクリプトにしている。
今年に入ってから、いろいろな場所で同じようなSQLばかり書いているので、面倒だと感じ始めたからシェルスプリクトにする。
ただ、それぞれ別の場所で作るから毎回微妙に違うものを書いていたので、次に自分が作るとき用のメモ。
自分がよく作るのはGit for WindowsのBashでOracleに接続してSQLを投げるシェルスプリクト。
そのまま実行するとSELECTするSQLが実行され、-aをつけるとINSERTするSQLを実行する。
作るもののほとんどがマスターに登録があるかないかを確認する系のSQLで、EXISTSで確認して無かったら追加する流れなので、値は指定しない事が多い。
#!/bin/bash # # 説明 readonly ORACLE_CONNECTION=USER/PASSWORD@SERVER:PORT/SID function usage() { cat <<_EOF_ Usage: $0 [-a] Description: 説明 Option: -a ADD DATA _EOF_ exit 1 } err() { echo "[$(date +'%Y-%m-%dT%H:%M:%S%z')]: $@" >&2 } function select_data() { sqlplus -s $ORACLE_CONNECTION << EOF SELECT * FROM USERS A WHERE NOT EXISTS ( SELECT * FROM USERS2 B WHERE A.ID = B.ID ) ; EXIT; EOF if [ $? -ne 0 ]; then err "ERROR SELECT" return 1 fi return 0 } function insert_data() { sqlplus -s $ORACLE_CONNECTION << EOF INSERT INTO USERS( ID , NAME ) SELECT A.ID , A.NAME FROM USERS2 A WHERE NOT EXISTS ( SELECT * FROM USERS B WHERE A.ID = B.ID ) ; COMMIT; EXIT; EOF if [ $? -ne 0 ]; then err "ERROR INSERT" return 1 fi return 0 } FLAG_A="" if [ "$OPTIND" = 1 ]; then while getopts abf:h OPT do case $OPT in a) FLAG_A="on" ;; h) usage ;; \?) echo "Try to enter the h option." 1>&2 ;; esac done else echo "No installed getoptions-command." 1>&2 exit 1 fi function main() { if [ -n "$FLAG_A" ]; then insert_data else select_data fi return 0 } main