SQLcl について

*以下は、サポート契約締結中のお客様に毎月配信しているサポートレターより一部抜粋して掲載しています。

SQLcl について

SQL*Plus を使用していて、シェルのようにヒストリー機能や、入力補完機能が使えず、不便に感じた事はないでしょうか。それらの不便な点を解消し、拡張版として開発されたのが SQLclとなります。
SQLcl は、SQL*Plus 従来の機能に加え、ヒストリー機能や入力補完機能など 20 種類以上の独自の機能が使用可能です。また、SSH トンネル、プロキシ・サーバー経由の接続など新たな接続方式もサポートしています。

SQLcl の入手方法

最新版の SQLcl は Oracle SQL Developer の英語のページよりダウンロードできます。

Accept License Agreement にチェック後、ページ下部にある「Command Line - SQLcl - Early Adopter」の欄にある「Download」をクリックすれば入手できます。

Java プログラムなので JDK のインストールは必要ですが、Oracle Net などの Oracle クライアントは不要です。

SQLcl の使用方法

SQLclは、Windows や Mac OS、Linux など全てのプラットフォームで使用できます。今回は Linux 環境で SQLcl を使用する方法を紹介します。

1. 任意の場所にダウンロードした zip ファイルを解凍します。

2. sqlcl/bin/sql に実行権限を付与します。

$ cd sqlcl/bin
$ chmod u+x sql

3. sqlcl/bin ディレクトリ上で、./sql (Windows 環境の場合は sql.exe を使用します) を実行します

4. ユーザー名、パスワード、データベース名を指定します。以下に実行例を記載します。

例 1) ./sql 実行後、scott ユーザーで PDB にログイン

$ ./sql

SQLcl: Release 4.2.0.15.177.0246 RC on Fri Jan 15 14:57:00 2016

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


Username? (''?) scott
Password? (**********?) *****
Database? (''?) pdb
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit 
Production With the Partitioning, OLAP, Advanced Analytics and Real 
Application Testing options

SQL>

例 2) ./sql に引数を指定してのログインも可能です。

$ ./sql scott/tiger@pdb

SQLcl: Release 4.2.0.15.177.0246 RC on Fri Jan 15 14:57:47 2016

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


Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit 
Production With the Partitioning, OLAP, Advanced Analytics and Real 
Application Testing options

SQL>

SQLcl の機能

SQL*Plus にはない、SQLcl 独自の機能を一部紹介します。

1. ALIAS

シェルのエイリアスと同じように、SQL 文や SQL*Plus コマンドに別名をつけて手軽に実行できます。

エイリアスの文法は以下の通りです。

SQL> alias [別名] = SQL 文、SQL*Plus コマンド

例)「select sysdate from dual」を「test」という別名で保存します。

SQL> alias test = select sysdate from dual;

別名の一覧を表示するには以下のコマンドを実行します。

SQL>SQL> alias

別名の内容を表示するには以下のコマンドを実行します。

SQL> alias list [別名]

例) 別名 [test] の内容を表示します。

SQL> alias list test

test
----
select sysdate from dual

別名を実行する場合は別名を入力し実行します。

SQL> [別名]

例) 別名 [test] を実行します。

SQL> test

Command=test

SYSDATE
---------------------------
16-01-12

※ 設定は XML ファイルとして保存されます。

Linux/UNIX : $HOME/.sqlcl/aliases.xml
Windows     : %APPDATA%\sqlcl\aliases.xml

2. CD

シェルの cd コマンドと同じように、カレントの作業ディレクトリを変更するコマンドです。

3. CTAS

列定義やセグメントサイズの変更時に使う事のある Create as select (CTAS) 文を出力するコマンドです。
※ テーブル作成の実行までは行いません。

例) EMP 表を 元に NEW_EMP 表を作成する CTAS 文を出力します。

SQL> ctas emp new_emp

CREATE TABLE "SCOTT"."NEW_EMP"
 (    "EMPNO",
      "ENAME",
      "JOB",
      "MGR",
      "HIREDATE",
      "SAL",
      "COMM",
      "DEPTNO",
       CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS"  ENABLE
 ) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS"

as
select * from EMP
SQL>

4. DDL

オブジェクトを再構築するためのコードを生成します。

例) EMP 表を 再構築するための DDL 文を出力します。

SQL> ddl emp

CREATE TABLE "SCOTT"."EMP"
 (    "EMPNO" NUMBER(4,0),
      "ENAME" VARCHAR2(10),
      "JOB" VARCHAR2(9),
      "MGR" NUMBER(4,0),
      "HIREDATE" DATE,
      "SAL" NUMBER(7,2),
      "COMM" NUMBER(7,2),
      "DEPTNO" NUMBER(2,0),
       CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS"  ENABLE,
       CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
        REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE
 ) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ;

5. HISTORY

シェルのように実行したコマンドや SQL の履歴を表示して再利用できます。引数なしで実行すると番号付きで履歴一覧が表示されます。番号を指定するとカレントバッファにその履歴が反映されます。使用回数 (USAGE) や処理時間 (TIME) も記録されて、それらを一覧とともに表示出来ます。
※カーソルキーの上下で SQL の履歴を表示できます。

設定は XML ファイルとして保存されます。

Linux/UNIX : $HOME/.sqlcl/history.xml
Windows     : %APPDATA%\sqlcl\history.xml

6. INFOMATION

テーブルの行数、定義、索引、参照整合性などの情報を表示します。INFO+ テーブル名で「列統計」も追加表示できます。

7. LOAD

CSV ファイルからのデータローディングを行うコマンドです。ファイルの最初の行はヘッダー行である必要があります。ヘッダー行の列は、表で定義されている列と一致する必要があります。

8. OERR

OERR ユーティリティ相当のコマンドとなります。

9. REPERT

watch(1) コマンドのように任意の SQL を指定した間隔で実行出来ます。

10. SSHTUNNEL

SQLcl から SSH 接続のトンネルを設定するコマンドです。

11. TNSPING

TNSPING ユーティリティ相当のコマンドとなります。

12. SET SQLFORMAT

出力形式を変更できます。出力できる形式は以下の通りです。

csv、html、xml、json、ansiconsole、insert、loader、fixed、default

例 1) 出力形式を ANSI Console に変更後、EMP 表を出力する問合せ

SQL> set sqlformat ansiconsole

SQL> select * from emp;


EMPNO  ENAME   JOBMGR    HIREDATE  SAL    COMM   DEPTNO
7,369  SMITH   CLERK      7,902  80-12-17  800   20
7,499  ALLEN   SALESMAN   7,698  81-02-20  1,600  300    30
7,521  WARD    SALESMAN   7,698  81-02-22  1,250  500    30
7,566  JONES   MANAGER    7,839  81-04-02  2,975 20
7,654  MARTIN  SALESMAN   7,698  81-09-28  1,250  1,400  30
7,698  BLAKE   MANAGER    7,839  81-05-01  2,850 30
7,782  CLARK   MANAGER    7,839  81-06-09  2,450 10
7,788  SCOTT   ANALYST    7,566  87-04-19  3,000 20
7,839  KING    PRESIDENT 81-11-17  5,000 10
7,844  TURNER  SALESMAN   7,698  81-09-08  1,500  0      30
7,876  ADAMS   CLERK      7,788  87-05-23  1,100 20
7,900  JAMES   CLERK      7,698  81-12-03  950   30
7,902  FORD    ANALYST    7,566  81-12-03  3,000 20
7,934  MILLER  CLERK      7,782  82-01-23  1,300 10

14行選択されました

例 2) 出力形式を CSV に変更後、EMP 表を出力する問合せ

SQL> set sqlformat csv

SQL> select * from emp

"EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","DEPTNO"
7369,"SMITH","CLERK",7902,80-12-17,800,,20
7499,"ALLEN","SALESMAN",7698,81-02-20,1600,300,30
7521,"WARD","SALESMAN",7698,81-02-22,1250,500,30
7566,"JONES","MANAGER",7839,81-04-02,2975,,20
7654,"MARTIN","SALESMAN",7698,81-09-28,1250,1400,30
7698,"BLAKE","MANAGER",7839,81-05-01,2850,,30
7782,"CLARK","MANAGER",7839,81-06-09,2450,,10
7788,"SCOTT","ANALYST",7566,87-04-19,3000,,20
7839,"KING","PRESIDENT",,81-11-17,5000,,10
7844,"TURNER","SALESMAN",7698,81-09-08,1500,0,30
7876,"ADAMS","CLERK",7788,87-05-23,1100,,20
7900,"JAMES","CLERK",7698,81-12-03,950,,30
7902,"FORD","ANALYST",7566,81-12-03,3000,,20
7934,"MILLER","CLERK",7782,82-01-23,1300,,10

14行選択されました

13. HELP

SQLcl で使用可能な機能一覧を表示できます。SQLcl 独自の機能は太字で表示されます。また、引数で機能名を入力することで機能の説明を表示できます。

例) HELP 機能で INFORMATION の説明を表示する。

SQL> help information
INFORMATION
--------

このコマンドはdescribeに似ていますが、リクエストされたオブジェクトの詳細を含みます。

INFO[RMATION] {[schema.]object[@connect_identifier]}

まとめ

ALIAS 機能による SQL 文の別名保存や、HISTORY 機能による SQL 文やコマンドの履歴を参照したり、SET SQLFORMAT を使用することで出力結果を CSV や JSON 形式に出来たりなど SQL*Plus には無い機能があります。ぜひ一度ご活用頂ければと思います。

SQLcl は、本稿執筆時(2016/1)において Early Adopter リリースです。そのため、現在のところ SQLcl に関してテクニカル・サポートの提供はございません。SQLcl について、お問合せ等、お受けすることはできませんので予めご理解ください。
また、今後正式な製品リリースが提供されました際には、そちらをご利用いただくようお願いいたします。

(オラクル事業部 サポートセンター 佐藤)

SQLcl について