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 について、お問合せ等、お受けすることはできませんので予めご理解ください。
また、今後正式な製品リリースが提供されました際には、そちらをご利用いただくようお願いいたします。
(オラクル事業部 サポートセンター 佐藤)