OracleDBの技術者は、大量の知識が必要になります。
データベースだけの知識ではなく、サーバやストレージの知識も必要になり、設計構築レベルの業務を行うには膨大な知識と経験が必要です。
そんな中で、OracleDBと言えばSQLPLUSでのSQLを使った作業が多くあります。
アプリケーションエンジニアもデータベースがOracleであれば当然使用していると思います。
そこで、SQLPLUSに関する覚えていて損はない小技をご紹介していきます。
私はかなり多用しているので、使い慣れたら便利だと思います。
SQLPLUSの小技
直前のSQL文を表示する
SQLは一回実行すると、そのSQL文はバッファに乗ります。
SQLPLUSではlを入力すると、直前のSQL文を表示できます。
実行結果は以下のようになります。
SQL> select INSTANCE_NUMBER,INSTANCE_NAME,HOST_NAME,STATUS from v$instance; INSTANCE_NUMBER INSTANCE_NAME HOST_NAME STATUS --------------- ---------------- -------------------- ------------ 1 odb12c Oracle12c.jp OPEN SQL> SQL> l 1* select INSTANCE_NUMBER,INSTANCE_NAME,HOST_NAME,STATUS from v$instance SQL>
直前に実行したSQL文が表示されていますね。
これを使って、次に紹介する小技を組み合わせることで、さらに便利になっていきます。
ちなみに、下記のように複数行のSQL文の場合は、特定の箇所だけ選択できます。
SQL> l 1 select INSTANCE_NUMBER,INSTANCE_NAME,HOST_NAME,STATUS,ARCHIVER 2 from v$instance 3* where INSTANCE_NAME = 'odb12c'
選択は簡単で、行番号を追加するだけです。
SQL> l2 2* from v$instance
*の印がある場合が選択されており、デフォルトは最終行になります。
バッファ上でSQLを置換する
SQLを実行していると、結果を引いてきたいカラムがケースによって異なります。
そのため、テキストエディタ等にSQLを張り付けて、そこで編集しているエンジニアも多いと思います。
しかし、簡単な整形であればこの小技だと簡単にできたりします。
SQL> l 1* select INSTANCE_NUMBER,INSTANCE_NAME,HOST_NAME,STATUS from v$instance SQL> SQL> c/STATUS/STATUS,ARCHIVER 1* select INSTANCE_NUMBER,INSTANCE_NAME,HOST_NAME,STATUS,ARCHIVER from v$instance SQL> SQL> l 1* select INSTANCE_NUMBER,INSTANCE_NAME,HOST_NAME,STATUS,ARCHIVER from v$instance SQL>
これは、STATUSという文字列をSTATUS,ARCHIVERに置換しています。
使い方は簡単で下記のようになります。
これだけでSQL文を整形できます。
大幅なSQLの変更ではなく、SELECT区を変えるくらいであれば、非常に使い勝手が良いです。
これを実行して、rもしくは/で再実行するという事を私はよくやっております。
文字列を追加する
最後は文字列の追加になります。
cを用いた置換で整形していく方法もありますが、単純にWhere区を追加したい場合は、下記の小技が使えます。
SQL> l 1* select INSTANCE_NUMBER,INSTANCE_NAME,HOST_NAME,STATUS,ARCHIVER from v$instance SQL> SQL> a where INSTANCE_NAME = 'odb12c' 1* select INSTANCE_NUMBER,INSTANCE_NAME,HOST_NAME,STATUS,ARCHIVER from v$instance where INSTANCE_NAME = 'odb12c' SQL> SQL> l 1* select INSTANCE_NUMBER,INSTANCE_NAME,HOST_NAME,STATUS,ARCHIVER from v$instance where INSTANCE_NAME = 'odb12c'
使い方は簡単で、下記のようになります。
注意点としては、スペースを入れたい場合は、aの後に必ず2つスペースを入力しましょう。
直後のスペースは文字列を判別するために必要なスペースで、追加文字としてのスペースはそのあとからになります。
まとめ
いかがでしたでしょうか。
簡単なコマンドですが、結構使っていない人も多く、通常のファイル実行や再実行くらいしか使わない現場が多い気がします。
私個人としては、多用しているのですが、実際はどうなんでしょうか。
面白いなと思ってみたらぜひ使ってみてください。