SQL
oracle

もっと楽に SQLcl 使おう【使いやすい SQL*Plus】

皆さんは SQLcl は使われていますか?
SQL*Plus の拡張にあたるツールなのですが、
OracleDB 12.2 からは標準で同梱されるようになりました。

これを使うと SQL*Plus でできなかった上下キーによる履歴の参照などができるようになります(他の利点については下記参照)。
("Oracle SQLcl"を使ってみる - Qiita)

これだけであれば rlwrapper などを導入する選択肢もありますが、
環境によっては好き勝手にインストールしづらい場合があります。
その点標準で同梱されている sqlcl であれば、何も気にせず使える可能性が高いです。
そのような場合の選択肢として知っておくと良いと思います。

環境

  • Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

使い方(OracleDB 12.2 以降)

普段 sqlplus でログインしている場合、sqlplussql に変えるだけで使えます。

$ sql <USERNAME>/<PASSWORD>@pdborcl

ただしこれをそのまま実行すると、下記のように カレントパスが変更されます
コマンドが見つかれない方は、$ORACLE/sqldeveloper/sqlcl/bin/ にファイルが無いかパスが通っていない可能性があります。

[oracle@dbserver mywork]$ echo $ORACLE_HOME
/u01/app/oracle/product/12.2.0/dbhome_1
[oracle@dbserver mywork]$ pwd
/home/oracle/work/fam_taro/mywork                                 # sql コマンド前のカレントディレクトリ
[oracle@dbserver mywork]$ sql /nolog

SQLcl: 月 12 25 10:25:51 2017のリリース12.2.0.1.0 RC
Copyright (c) 1982, 2017, Oracle.  All rights reserved.

SQL> pwd
/u01/app/oracle/product/12.2.0/dbhome_1/sqldeveloper/sqlcl/bin/   # sql コマンド後のカレントディレクトリ

上記の通り、カレントディレクトリが $ORACLE_HOME/sqldeveloper/sqlcl/bin/ に変わっています。
(このように pwd コマンドなどが直接使えるのも sqlcl の特徴です)

sqlcl では cd コマンドが叩けるため、
sqlcl でログイン後に cd /to/my/directry/path と叩けば良いのですが、
自身の作業フォルダから sqlcl を呼び出す場合は何かとストレスになります。

起動スクリプト(ちょっと改善版)

ですので、予め下記のようなスクリプトを用意しておくと便利です。
コメントアウトしている部分は、行幅などの設定用ファイル (login.sql) を読み込むためにあります。
はじめに何か設定したい方は、 login.sql などに記述しておくと良いです。

#!/bin/sh

FNAME=tmp_login.sql
SCRIPT_DIR=$(cd $(dirname $0); pwd)

echo "cd ${SCRIPT_DIR}" > ${FNAME}
echo "" >> ${FNAME}
# echo "@login" >> ${FNAME}

sql <USERNAME>/<PASSWORD>@pdborcl @${SCRIPT_DIR}/${FNAME}

このスクリプトを使えば、以下のように pwd の結果が同じ場所になります。
(というかこれくらいデフォルトの sqlcl で対応しt)

[oracle@dbserver mywork]$ pwd
/home/oracle/work/fam_taro/mywork

[oracle@dbserver mywork]$ sh sample.sh

SQLcl: 月 12 25 10:47:01 2017のリリース12.2.0.1.0 RC

Copyright (c) 1982, 2017, Oracle.  All rights reserved.

Last Successful login time: 月 12月 25 2017 10:47:04 +09:00

接続先:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> pwd
/home/oracle/work/fam_taro/mywork

それでは皆さん快適な SQLcl ライフを!