1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQL*Plusの新機能を試す (Oracle Database 12c Release 2)

Posted at

Oracle Database 12c Release 2に付属するSQL*Plusの新機能を試してみました。

HISTORY

SQL*Plus待望のコマンド実行履歴の管理機能です。残念ながらSQLclのような矢印キーによる履歴操作はできません。

初期設定

履歴管理機能はデフォルトではOFFになっているのでSET HISTORY ONコマンドで有効にします。ONの代りに数字を指定すると、履歴保存数を指定できます。デフォルト値は100です。

SQL> SHOW HISTORY
history is OFF
SQL> 
SQL> SET HISTORY ON
SQL> SHOW HISTORY
historyはONであり、設定先は "100"です。
SQL> 
SQL> SET HISTORY 200
SQL> SHOW HISTORY
historyはONであり、設定先は "200"です。
SQL>

履歴の管理

実行履歴を表示するにはHISTORYコマンド(またはHISTORY LISTコマンド)を実行します。履歴はSQL文の成功/失敗にかかわらず保存されますが、HISTORYコマンド自身は履歴に入りません。HISTORYコマンドはHISTと省略できます。

SQL> HISTORY
  1  SELECT * FROM scott.emp;
  2  SELECT SYSDATE FROM DUAL;
  3  SELECT 1;

過去に実行したコマンドをもう一度実行するにはHISTORY 番号 RUNコマンドを実行します。HISTORYコマンドを再実行すると、最後に実行したコマンド先頭にアスタリスクが表示されます。

SQL> HISTORY
  1  SELECT * FROM scott.emp;
  2  SELECT SYSDATE FROM DUAL;
  3  SELECT 1;

SQL> HIST 2 RUN

SYSDATE
--------
18-05-21

SQL> HISTORY
  1  SELECT * FROM scott.emp;
* 2  SELECT SYSDATE FROM DUAL;
  3  SELECT 1;

履歴を修正するにはHISTORY 番号 EDITコマンドを実行します。エディタはDEFINE _EDITORコマンドで指定できます。Linux環境のデフォルト値はviです。HISTORY EDITコマンドで修正したSQL文はHISTORYの最後に追加されます。

SQL> HISTORY 2 EDIT
 -- エディタ起動 --

SQL> HISTORY
  1  SELECT * FROM scott.emp;
  2  SELECT SYSDATE FROM DUAL;
  3  SELECT 1;
  4  SELECT SYSDATE TODAY FROM DUAL;	<- 追加された

履歴全体を削除するにはHISTORY CLEARコマンドを実行します。一部だけ削除するにはHISTORY 番号 DELETEコマンドを実行します。

新規追加されたパラメータ

パフォーマンスを向上させるためのSQL*Plusパラメータが追加されました。SETコマンドで設定します。

パラメータ デフォルト値 説明 備考
LOBPREFETCH 0 プリフェッチされるLOBデータ量をバイト数で指定 最大値は2GB
ROWPREFETCH 1 プリフェッチされるレコード数を指定 データ量の最大バイト数は2GB
STATEMENTCACHE 0 文キャッシュ・サイズを指定 STATEMENTCに省略可能

上記の通り、追加されたパラメータはデフォルトでは使用されません。個別に指定しても良いのですが、SQL*Plusの-Fオプションをしていすると一括でパラメータを増加させることができます。
-Fオプションで変更されるのは上記に加えてARRAYSIZEとPAGESIZEです。

$ sqlplus / as sysdba
SQL> SHOW ARRAYSIZE
arraysize 15
SQL> SHOW PAGESIZE
pagesize 14
SQL> SHOW LOBPREFETCH
lobprefetch 0
SQL> SHOW ROWPREFETCH
rowprefetch 1
SQL> SHOW STATEMENTCACHE
statementcache is 0
SQL>

$ sqlplus -F / as sysdba
SQL> SHOW ARRAYSIZE
arraysize 100
SQL> SHOW PAGESIZE
pagesize 50000
SQL> SHOW LOBPREFETCH
lobprefetch 16384
SQL> SHOW ROWPREFETCH
rowprefetch 2
SQL> SHOW STATEMENTCACHE
statementcache is 20
SQL>

CSV出力

SELECT文の実行結果をCSV形式で出力できるようになりました。SET MARKUP CSV ONコマンドを実行します。SQL*Plus起動オプション -M "CSV ON"を指定するとデフォルト状態でCSV化できます。デリミタとしてカンマが指定され、文字列型はダブル・クオーテーションで囲まれます。文字データ内にダブル・クオーテーションが含まれる場合は、ダブル・クオーテーションが2重になります。

SQL> SET MARKUP CSV ON
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
SQL> 

デリミタを変更する場合はSET MARKUP CSV ON DELIMITER '区切り文字'コマンドを実行します。囲み文字にタブを指定してもスペースに変換されます。

SQL> SET MARKUP CSV ON DELIMITER ';'
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
SQL>

囲み文字を指定しない場合は、SET MARKUP CSV ON QUOTE OFFコマンドを実行します。DELIMITERとQUOTEを両方指定することもできます。

SQL> SET MARKUP CSV ON QUOTE OFF
SQL> SELECT * FROM scott.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

VARIABLE

バインド変数の宣言時に初期値を指定できるようになりました。

構文は「VARIABLE 変数名 [データ型 [=初期値]]」です。

SQL> VARIABLE tmp_val NUMBER = 100
SQL> PRINT tmp_val

   TMP_VAL
----------
       100

SQL>

FEEDBACK

SET FEEDBACK ONLY文を実行すると、検索レコード数のみが出力されるようになります。

SQL> SET FEEDBACK ONLY
SQL> SELECT * FROM DBA_OBJECTS;

23002行が選択されました。

SQL>
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?