#はじめに
##目的
JavaベースのOracleコマンドラインツールOracle SQLclを使ってみます。
JeffSmithさんの以下の動画やBLOGの内容を試したものになります。
-
SQLcl overview – A new Command Line Interface for Oracle Database from Jeff Smith
https://www.youtube.com/watch?v=HApdy-o525A -
Oracle SQLcl Slidedeck: Overview of our new command line interface
http://www.thatjeffsmith.com/archive/2015/02/oracle-sqlcl-slidedeck-overview-of-our-new-command-line-interface/
##環境
- Oracle SQL Developer 4.1 Early Adopter (4.1.0.17.29)
####接続する環境
- Oracle Linux Server release 6.5
- Oracle Database 12.1.0.2
#試してみる
##Download
Oracle SQL Developer 4.1 Early Adopter (4.1.0.17.29)
http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/sqldev-41ea-2372780.html
Accept License Agreementボタンをチェックし、下のほうにある「Command Line - SDSQL」をダウンロードします。
##インストール
任意の場所にダウンロードしてきたzipファイルを解凍します。
$ pwd
/home/oracle
$ unzip sqlcl-4.1.0.15.029.1246-no-jre.zip
Archive: sqlcl-4.1.0.15.029.1246-no-jre.zip
inflating: sqlcl/bin/sql
inflating: sqlcl/bin/sql.bat
inflating: sqlcl/lib/SQLinForm.jar
inflating: sqlcl/lib/jline-2.12.jar
inflating: sqlcl/lib/ojdbc6.jar
inflating: sqlcl/lib/oracle.dbtools-common.jar
inflating: sqlcl/lib/oracle.sqldeveloper.sqlcl.jar
inflating: sqlcl/lib/orai18n-mapping.jar
inflating: sqlcl/lib/orai18n-utility.jar
inflating: sqlcl/lib/orai18n.jar
inflating: sqlcl/lib/xdb6.jar
inflating: sqlcl/lib/xmlparserv2.jar
bin/sqlに実行権限を付与します。
$ cd sqlcl/bin
$ chmod u+x sql
##起動&接続
Java7 JREが動作することを確認します。
$ java -version
java version "1.7.0_71"
OpenJDK Runtime Environment (rhel-2.5.3.2.0.1.el6_6-x86_64 u71-b14)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
EZCONNECで接続します。
$ pwd
/home/oracle/sqlcl/bin
$ ./sql soe/soe@//localhost:1521/pdb_1
SQLcl: Release 4.1.0 Beta on Sun Mar 01 12:48:12 2015
Copyright (c) 1982, 2015, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
SQL>
SQLPlusで使用できるコマンドを試してみます。
##新しいコマンドを使う
以下のコマンドはSQLPlusにない、新しいコマンドのようです。
helpコマンド実行で一覧を表示した際に色違いで表示されました。
SQLcl新しいコマンド |
---|
ALIAS |
APEX |
BRIDGE |
CD |
CTAS |
DDL |
FORMAT |
HISTORY |
INFORMATION |
以下でいくつかのコマンドを試してみます。
ALIAS
SQLコマンドに別名をつけることができます。
オブジェクト一覧を表示するエイリアスをつけてみます。
SQL> help alias
ALIAS
------
Alias is a command which allows you to save a sql, plsql or sqlplus script and assign it a shortcut command.
"alias" - print a list of aliases
SQL> alias
locks
tables
SQL> alias objects=select object_name,object_type from user_objects
2 /
SQL> alias
locks
objects
tables
SQL> objects
Command=objects
OBJECT_NAME OBJECT_TYPE
------------------------------ ------------------------------
CUSTOMERS TABLE
ADDRESSES TABLE
CARD_DETAILS TABLE
WAREHOUSES TABLE
CTAS
Create Table As Select(CTAS)のDDLを作成してくれます。
(テーブル作成の実行まではしません)
CUSTOMERS表をNEW_CUSTOMERS表でCTASのDDLを作ってみます。
SQL> help ctas
CTAS
ctas table new_table
Uses DBMS_METADATA to extract the DDL for the existing table
Then modifies that into a create table as select * from
SQL> ctas customers new_customers
CREATE TABLE "SOE"."NEW_CUSTOMERS"
( "CUSTOMER_ID",
"CUST_FIRST_NAME",
"CUST_LAST_NAME",
"NLS_LANGUAGE",
"NLS_TERRITORY",
"CREDIT_LIMIT",
"CUST_EMAIL",
<中略>
STORAGE(INITIAL 8388608 NEXT 8388608 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SOE"
as
select * from CUSTOMERS
###DDL
テーブルのDDL(関連する索引なども)を作成してくれる。
CUSTOMERS表のDDLを取得します。
SQL> help ddl
DDL [<object_name>] [<filename>]
SQL> ddl customers
CREATE TABLE "SOE"."CUSTOMERS"
( "CUSTOMER_ID" NUMBER(12,0) CONSTRAINT "CUST_CUSTID_NN" NOT NULL ENABLE,
"CUST_FIRST_NAME" VARCHAR2(40) CONSTRAINT "CUST_FNAME_NN" NOT NULL ENABLE,
<中略>
STORAGE(INITIAL 8388608 NEXT 8388608 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SOE"
CREATE INDEX "SOE"."CUST_ACCOUNT_MANAGER_IX" ON "SOE"."CUSTOMERS" ("ACCOUNT_MGR_ID")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS NOLOGGING
STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SOE"
PARALLEL 4
<中略>
SQL>
###HISTORY
過去のコマンドの履歴を表示します。
SQL> help history
HISTORY
---------
history [<index> | FULL | USAGE | HELP ]
SQL>history help
history [<index> | FULL | USAGE | HELP ]
SQL>history full
1 select 1 from dual;
2 select 2
> from dual;
3 select 3 from dual
> where 1=1;
SQL>history usage
1 (2) select 1 from dual;
2 (11) select 2 from dual;
3 (2) select 3 from dual where 1=1;
SQL>history 3
1 select 3 from dual
2* where 1=1;
###INFORMATION
テーブルの行数、定義、索引、参照整合性などの情報を表示します。
CUSTOMERS表の情報を表示します。
SQL> help information
INFORMATION
--------
This command is like describe but with more details about the objects requersted.
INFO[RMATION] {[schema.]object[@connect_identifier]}
SQL> info customers
TABLE: CUSTOMERS
LAST ANALYZED:2014-12-23 17:00:45.0
ROWS :1000000
SAMPLE SIZE :1000000
INMEMORY :DISABLED
COMMENTS :
Columns
NAME DATA TYPE NULL DEFAULT COMMENTS
*CUSTOMER_ID NUMBER(12,0) No
CUST_FIRST_NAME VARCHAR2(40 BYTE) No
CUST_LAST_NAME VARCHAR2(40 BYTE) No
NLS_LANGUAGE VARCHAR2(3 BYTE) Yes
NLS_TERRITORY VARCHAR2(30 BYTE) Yes
CREDIT_LIMIT NUMBER(9,2) Yes
CUST_EMAIL VARCHAR2(100 BYTE) Yes
ACCOUNT_MGR_ID NUMBER(12,0) Yes
CUSTOMER_SINCE DATE Yes
CUSTOMER_CLASS VARCHAR2(40 BYTE) Yes
SUGGESTIONS VARCHAR2(40 BYTE) Yes
DOB DATE Yes
MAILSHOT VARCHAR2(1 BYTE) Yes
PARTNER_MAILSHOT VARCHAR2(1 BYTE) Yes
PREFERRED_ADDRESS NUMBER(12,0) Yes
PREFERRED_CARD NUMBER(12,0) Yes
Indexes
INDEX_NAME UNIQUENESS STATUS FUNCIDX_STATUS COLUMNS COLUMN_EXPRESSION
SOE.CUST_DOB_IX NONUNIQUE VALID DOB
SOE.CUSTOMERS_PK UNIQUE VALID CUSTOMER_ID
SOE.CUST_EMAIL_IX NONUNIQUE VALID CUST_EMAIL
SOE.CUST_ACCOUNT_MANAGER_IX NONUNIQUE VALID ACCOUNT_MGR_ID
SOE.CUST_FUNC_LOWER_NAME_IX NONUNIQUE VALID ENABLED SYS_NC00017$, SYS_NC00018$ LOWER("CUST_LAST_NAME")
SOE.CUST_FUNC_LOWER_NAME_IX NONUNIQUE VALID ENABLED SYS_NC00017$, SYS_NC00018$ LOWER("CUST_FIRST_NAME")
References
TABLE_NAME CONSTRAINT_NAME DELETE_RULE STATUS DEFERRABLE VALIDATED GENERATED
ADDRESSES ADD_CUST_FK NO ACTION ENABLED DEFERRABLE NOT VALIDATED USER NAME
ORDERS ORDERS_CUSTOMER_ID_FK SET NULL ENABLED NOT DEFERRABLE NOT VALIDATED USER NAME
SQL>
###SET SQLFORMAT
#####SET SQLFORMAT ANSICONSOLE
いいかんじに列長とかを調整してくれる。
SQL> set sqlformat ansiconsole
SQL> l
1 select * from order_items
2* where rownum < 11;
SQL> r
ORDER_ID LINE_ITEM_ID PRODUCT_ID UNIT_PRICE QUANTITY DISPATCH_DATE RETURN_DATE GIFT_WRAP CONDITION SUPPLIER_ID ESTIMATED_DELIVERY
718,846 1 378 779 4 12-APR-12 Plain New 581 23-MAR-00
718,846 2 351 789 6 12-MAR-12 None Return 391 26-MAR-07
718,846 3 349 952 4 23-FEB-12 None New 474 29-OCT-11
718,847 1 489 718 4 29-JAN-12 None New 456 02-MAR-00
718,847 2 458 852 4 27-FEB-12 None New 351 08-NOV-04
718,848 1 687 1,192 4 10-JAN-12 Seasonal New 317 27-SEP-08
718,848 2 403 830 4 05-APR-12 Boy_Birthday New 494 11-APR-00
718,848 3 508 760 3 12-MAR-12 None New 468 05-MAY-07
718,849 1 339 1,373 6 22-FEB-12 None New 339 15-APR-07
718,849 2 576 862 3 13-FEB-12 None New 372 30-JUL-11
#####SET SQLFORMAT CSV
結果をCSV形式で出力
SQL> select * from order_items where rownum < 11;
"ORDER_ID","LINE_ITEM_ID","PRODUCT_ID","UNIT_PRICE","QUANTITY","DISPATCH_DATE","RETURN_DATE","GIFT_WRAP","CONDITION","SUPPLIER_ID","ESTIMATED_DELIVERY"
718846,1,378,779,4,12-APR-12,,"Plain","New",581,23-MAR-00
718846,2,351,789,6,12-MAR-12,,"None","Return",391,26-MAR-07
718846,3,349,952,4,23-FEB-12,,"None","New",474,29-OCT-11
718847,1,489,718,4,29-JAN-12,,"None","New",456,02-MAR-00
718847,2,458,852,4,27-FEB-12,,"None","New",351,08-NOV-04
718848,1,687,1192,4,10-JAN-12,,"Seasonal","New",317,27-SEP-08
718848,2,403,830,4,05-APR-12,,"Boy_Birthday","New",494,11-APR-00
718848,3,508,760,3,12-MAR-12,,"None","New",468,05-MAY-07
718849,1,339,1373,6,22-FEB-12,,"None","New",339,15-APR-07
718849,2,576,862,3,13-FEB-12,,"None","New",372,30-JUL-11
#####SET SQLFORMAT JSON
結果をJSON形式で出力
SQL> set sqlformat json
SQL> r
{"items":[
{"order_id":718846,"line_item_id":1,"product_id":378,"unit_price":779,"quantity":4,"dispatch_date":"12-APR-12","gift_wrap":"Plain","condition":"New","supplier_id":581,"estimated_delivery":"23-MAR-00"},{"order_id":718846,"line_item_id":2,"product_id":351,"unit_price":789,"quantity":6,"dispatch_date":"12-MAR-12","gift_wrap":"None","condition":"Return","supplier_id":391,"estimated_delivery":"26-MAR-07"},{"order_id":718846,"line_item_id":3,"product_id":349,"unit_price":952,"quantity":4,"dispatch_date":"23-FEB-12","gift_wrap":"None","condition":"New","supplier_id":474,"estimated_delivery":"29-OCT-11"},{"order_id":718847,"line_item_id":1,"product_id":489,"unit_price":718,"quantity":4,"dispatch_date":"29-JAN-12","gift_wrap":"None","condition":"New","supplier_id":456,"estimated_delivery":"02-MAR-00"},{"order_id":718847,"line_item_id":2,"product_id":458,"unit_price":852,"quantity":4,"dispatch_date":"27-FEB-12","gift_wrap":"None","condition":"New","supplier_id":351,"estimated_delivery":"08-NOV-04"},{"order_id":718848,"line_item_id":1,"product_id":687,"unit_price":1192,"quantity":4,"dispatch_date":"10-JAN-12","gift_wrap":"Seasonal","condition":"New","supplier_id":317,"estimated_delivery":"27-SEP-08"},{"order_id":718848,"line_item_id":2,"product_id":403,"unit_price":830,"quantity":4,"dispatch_date":"05-APR-12","gift_wrap":"Boy_Birthday","condition":"New","supplier_id":494,"estimated_delivery":"11-APR-00"},{"order_id":718848,"line_item_id":3,"product_id":508,"unit_price":760,"quantity":3,"dispatch_date":"12-MAR-12","gift_wrap":"None","condition":"New","supplier_id":468,"estimated_delivery":"05-MAY-07"},{"order_id":718849,"line_item_id":1,"product_id":339,"unit_price":1373,"quantity":6,"dispatch_date":"22-FEB-12","gift_wrap":"None","condition":"New","supplier_id":339,"estimated_delivery":"15-APR-07"},{"order_id":718849,"line_item_id":2,"product_id":576,"unit_price":862,"quantity":3,"dispatch_date":"13-FEB-12","gift_wrap":"None","condition":"New","supplier_id":372,"estimated_delivery":"30-JUL-11"},{}]}
SQL>
#おわりに
Oracle ClientなどインストールしなくてもJREさえあれば、実行できるのがよいですね。
PCからの接続や、DB構築後の別サーバからの接続確認などに持って行っておくと便利そう。
##参考
-
SQLcl overview – A new Command Line Interface for Oracle Database from Jeff Smith
https://www.youtube.com/watch?v=HApdy-o525A -
Oracle SQLcl Slidedeck: Overview of our new command line interface
http://www.thatjeffsmith.com/archive/2015/02/oracle-sqlcl-slidedeck-overview-of-our-new-command-line-interface/
##その他
本筋と関係ないところで、ハマったメモ
####MACでjavaのパスが通ってない問題
JREをMACにインストールしたのに、javaコマンドを打つと、インストールしろと言われる事象について。
https://www.java.com/ja/download/faq/java_mac.xml#cmdline
http://5log.jp/blog/path/