SQLclのプロンプト画面をカスタムする
Oracle Databaseの簡易クライアントである「Oracle SQL Developer Command-Line (SQLcl)」では,プロンプト部分を以下の画像のようにカスタムすることができます。
ユーザー名や接続しているDB名,時刻などを表示することができますので,構築作業や複数ターミナルを展開している時などにオススメです。
また,SQLclのインストールについてもこの記事の最後で扱っています。参考にしてください。
👾プロンプト文字列を変更する
プロンプト文字列である「SQL>
」を以下のコマンドでお好みのものに書き換えます。
set sqlprompt "(σ>∀<)σ>> "
SQL> set sqlprompt "(σ>∀<)σ>> "
(σ>∀<)σ>> select * from dual;
DUMMY
________
X
(σ>∀<)σ>>
事前設定されている変数を使用することで,環境に応じた表示もさせることができます。
SQL> set sqlp "(&_DATE) &_USER [&_PWD] SQLcl>> "
(18-APR-25) SYSTEM [/home/koin3z] SQLcl>>
なお,事前に定義されている変数は以下の通りです。
変数 | 説明 |
---|---|
_DATE | 現在の日付(例:18-APR-25) |
_CONNECT_IDENTIFIER | 接続識別子(例:ORCLPDB,//<hostname>:1521/ORCL) |
_USER | ログインユーザー(例: SYSTEM) |
_PRIVILEGE | 権限情報(例:AS SYSDBA) |
_SQLPLUS_RELEASE | SQL*Plus リリース番号(2501000000) |
_EDITOR | エディタ設定(例:vi) |
_O_VERSION | Oracle DB バージョン情報(例:"Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free Version 23.5.0.24.07) |
_O_RELEASE | Oracle リリース番号(例:2305000000) |
_PWD | カレントディレクトリパス(例:/home/koin3z) |
_SQL_ID | 前回クエリの SQL_ID |
_PROJECT | プロジェクト名 |
DEFINE
コマンドより,実際に表示される値を確認することができます。
上記にない値を使用したい場合は,新しく変数を定義することで使用できます。
column con_name new_value _con_name
select SYS_CONTEXT('USERENV','CON_NAME') as con_name from dual;
set sqlprompt "&_CON_NAME> "
SQL> column con_name new_value _con_name
SQL> select SYS_CONTEXT('USERENV','CON_NAME') as con_name from dual;
CON_NAME
___________
CDB$ROOT
SQL> set sqlprompt "&_USER@&_CON_NAME> "
CDB$ROOT>
私は以下で設定しています。表示は SYSTEM@CDB$ROOT>
のようになります。
set sqlprompt "&_USER@&_CON_NAME> "
また,変数は接続開始時に定義されるため,セッションの途中で接続を変更しても表示される文字列に動的な変更はありません。切り替えの際はご注意ください。
SYSTEM@CDB$ROOT> sho con_name
CON_NAME
------------------------------
CDB$ROOT
SYSTEM@CDB$ROOT> alter session set container=freepdb1;
Session altered.
SYSTEM@CDB$ROOT> sho con_name
CON_NAME
------------------------------
FREEPDB1
📊ステータスバーを表示・変更する
未コミットのトランザクションの有無や,前回のSQLの実行時間などを動的に表示してくれるステータスバーです。
この機能はドキュメント等にもほぼ記載がないのですが,どうやらSQLcl21.2からの機能のようです。[1]
まずはオンにしてみます。
set statusbar on
すると画面下にステータスを表す行が現れます。
デフォルトでは左から以下の4つが表示されるようです。
- EDITMOD:現在の編集モード
- emacs:Emacs キーバインド
- vicmd:vi のコマンドモード
- viins:vi のインサートモード
- LINECOL:カーソルの 行番号:列番号 を表示
- USERNAME:現在接続中のデータベース・ユーザー名
- DBID:接続識別子
その他,表示できるステータスバーの項目は以下の通りです。
項目 | 説明 |
---|---|
CURSOR | 編集バッファ内の文字位置 |
CWD | カレントのワーキングディレクトリ |
ENCODING | ローカルの文字エンコーディング |
GIT | カレントディレクトリが属するGitブランチ |
JAVA | 実行中のJavaバージョン |
JOBS | バックグラウンドジョブの「実行中 |
OCIPROFILE | OCIプロファイル |
OCIREGION | OCIリージョン |
OCITENANCY | OCIテナント |
PROJECT | プロジェクト名 |
STATUS | (エラー等の)ステータス情報 |
TIMING | 直近コマンドの実行時間 |
TXN | 未コミット/ロールバック待ちトランザクションの有無 |
現在使用している項目や上記の一覧はshow statusbar
で確認することができます。
調べていないので不明ですが,OCIREGIONなどはOCIのデータベースサービスを使用している際に表示されるのでしょうか...?
項目は以下のようにadd
で追加することができます
set statusbar add timing
消したい場合はremove
を使用します。
set statusbar remove timing
表示項目をまとめて設定したい場合はスペース区切りで列挙します。小文字で指定しないといけないという罠があります。
set statusbar cwd java status timing
その他構文の詳細は`help set statusbar`から確認できます。
SQL> help set statusbar
SET STATUSBAR
-------------
set statusbar on | off
| <component> .. <component>
| default
| default <component> .. <component>
| add <component>
| remove <component>
<component> = any unused status bar component, as listed by 'show statusbar'
EXAMPLES
set statusbar off
turn the status bar off
set statusbar editmode dbid cursor
specify the components to be shown in the status bar
set statusbar default
set the components shown in the status bar to the default
set statusbar default editmode dbid cursor
set the default components
この機能もまた,セッション固有の設定となっているため,再接続すると設定はリセットされます。接続のたびに設定を反映したい場合は後述するlogin.sql
を使用します。
設定項目からも薄々感じ取れますが,SQLclの機能としてSQLやPL/SQLの記述時にviやemacsを使用することができるようです。ですが,この機能についてはまたの機会に回すとします。
🔦ハイライトする
文字通り入力した文字を色付けしてくれる機能です。SQLcl24.1より,デフォルトでこの機能はオンになっているようです。
ハイライトをオン/オフにする
set highlighting on/off
SQLのキーワード(SELECT, FROMなど),コメント,エラー文に色をそれぞれしたり,太字や下線などさまざま表示設定ができるようです。
構文の詳細は`help set highlighting`から確認できます。
SQL> help set highlighting
SET HIGHLIGHTING
----------------
set highlighting <flag>
| <type> RESET
| <type> FOREGROUND <color>
| <type> BACKGROUND <color>
| <type> BOLD <flag>
| <type> ULINE <flag>
| <type> INVERSE <flag>
<type> = DEFAULT | COMMENT | STRING | NUMBER | PUNCTUATION
| KEYWORD | IDENTIFIER | ERROR
<color> = RED | BLUE | BLACK | CYAN | GREEN | MAGENTA | WHITE
| YELLOW
<flag> = ON | OFF | RESET
EXAMPLES
set highlighting on
set highlighting keyword foreground red
構文エラーは赤色で指摘してくれます。
🌈文字の色を変える
出力フォーマットにANSIエスケープシーケンスを指定することで文字の色付けができます。この機能は冒頭紹介したプロンプト文字列と組み合わせて使用することもできます。[2]
set sqlformat ansiconsole
set sqlprompt "@|red _USER|@@@|green _O_RELEASE|@@|blue >|@"
@|color text|@
の形式で指定することにより,text部分を指定した色で表示できます。
利用できるカラーは以下リンクを参考にしてみてください。
🧰設定を自動適用する
上記の設定はログアウトすると元に戻ってしまいます。
ログインするたびに追加した設定を反映したい場合は,glogin.sql
やlogin.sql
に記述することで,毎回ファイル内のコマンドおよび設定を自動で反映させることができます。
glogin.sql
は$ORACLE_HOME/sqlplus/admin/
に配置し,SQLcl(またはSQL*Plux)を実行したすべてのユーザーに適用されます。
一方,login.sql
はカレントディレクトリまたは$SQLPATH
に指定したディレクトリ配下に配置するスクリプトです。glogin.sql
の後に実行されるため,ユーザー個別の設定を行うことができます。
set sqlprompt "&_USER> "
set statusbar on
set statusbar cwd java status timing
カレントディレクトリにあるlogin.sql
ではセキュリティの観点から,DBへアクセスするコマンド(SELECT,INSERTなど)を実行できず,以下のようなエラーがでます。そのため,置換変数_CON_NAME
を定義したいなどの場合,$SQLPATH
に配置したlogin.sql
やglogin.sql
を使用してください。
login.sql found in the CWD. DB access is restricted for login.sql.
Adjust the SQLPATH to include the path to enable full functionality.
🛒SQLclをインストールする
おまけでSQLclのインストールについてです。
動作のためにはJava 11以降のバージョンが必要になります。
Oracle Linuxの場合,標準リポジトリに含まれるOracle Developer Tools内に含まれていますので,以下コマンドだけで準備ができます。
dnf install -y java-21-openjdk-headless sqlcl
一方,Ubuntuにはパッケージとしてsqlcl-package
というものがありますが,これはDebianパッケージ化するためのツールであり,SQLcl本体は含まれていません。[3]
そのため現時点のUbuntuでは,zipで準備することになると思います。
zipを使用する場合,最新バージョンのダウンロードページは以下になります。
https://www.oracle.com/database/sqldeveloper/technologies/sqlcl/download/"
$ wget https://download.oracle.com/otn_software/java/sqldeveloper/sqlcl-25.1.0.101.2353.zip
$ unzip sqlcl-25.1.0.101.2353.zip
zipの展開後は/sqlcl/bin/sql
に実行ファイルがありますので,必要に応じてパスを通してください。
export PATH=`pwd`/sqlcl/bin:$PATH
sql
コマンドで立ち上げられることを確認します。
$ sql /nolog
または
$ sqlcl/bin/sql /nolog
SQLcl: Release 25.1 Production on Fri Apr 18 12:30:58 2025
Copyright (c) 1982, 2025, Oracle. All rights reserved.
SQL>
Discussion