🥳

SQLclのプロンプト画面をカスタムする

に公開

Oracle Databaseの簡易クライアントである「Oracle SQL Developer Command-Line (SQLcl)」では,プロンプト部分を以下の画像のようにカスタムすることができます。

ユーザー名や接続しているDB名,時刻などを表示することができますので,構築作業や複数ターミナルを展開している時などにオススメです。

また,SQLclのインストールについてもこの記事の最後で扱っています。参考にしてください。

👾プロンプト文字列を変更する

プロンプト文字列である「SQL> 」を以下のコマンドでお好みのものに書き換えます。

SET SQLP[ROMPT] {SQL>|text}
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]

SQLclの表示形式を「ANSIコンソール向け」に切り替え
set sqlformat ansiconsole
プロンプト文字列を色付きで指定
set sqlprompt "@|red _USER|@@@|green _O_RELEASE|@@|blue >|@"

@|color text|@の形式で指定することにより,text部分を指定した色で表示できます。

利用できるカラーは以下リンクを参考にしてみてください。

The entire table of ANSI color codes.

🧰設定を自動適用する

上記の設定はログアウトすると元に戻ってしまいます。
ログインするたびに追加した設定を反映したい場合は,glogin.sqllogin.sqlに記述することで,毎回ファイル内のコマンドおよび設定を自動で反映させることができます。

glogin.sql$ORACLE_HOME/sqlplus/admin/に配置し,SQLcl(またはSQL*Plux)を実行したすべてのユーザーに適用されます。
一方,login.sqlはカレントディレクトリまたは$SQLPATHに指定したディレクトリ配下に配置するスクリプトです。glogin.sqlの後に実行されるため,ユーザー個別の設定を行うことができます。

login.sqlの設定例
set sqlprompt "&_USER> "
set statusbar on
set statusbar cwd java status timing

カレントディレクトリにあるlogin.sqlではセキュリティの観点から,DBへアクセスするコマンド(SELECT,INSERTなど)を実行できず,以下のようなエラーがでます。そのため,置換変数_CON_NAMEを定義したいなどの場合,$SQLPATHに配置したlogin.sqlglogin.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内に含まれていますので,以下コマンドだけで準備ができます。

Oracle Linuxの場合
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/"

zipでインストールする
$ 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>
脚注
  1. Oracle SQL Developer Command Line (SQLcl) 21.2 Release Notes ↩︎

  2. SQL Developer Command Line Release 24.4 - User's Guide ↩︎

  3. Ubuntu Manpage: make-sqlcl-package - Oracle SQL Developer Command-Line Debian package builder ↩︎

Discussion