表を見やすく整形する

オラクルデータベースの基本

selectの基本

データベース上に作成されている表は “select” を使用することで表に格納されている情報を表示さることができます。
前回解説したSCOTTスキーマを使用していきます。



表をselectするときの基本的なコマンドは以下です。

select <列名>,<列名>,… from <表名> ;

SQL> select empno,ename,job from emp;

 EMPNO ENAME         JOB
ーーーーー ーーーーーーーーーーー ーーーーーーーーーーー
  7369  SMITH        CLERK
  7499  ALLEN        SALESMAN
  7521  WARD        SALESMAN
  7566  JONES        MANAGER
  7654  MARTIN       SALESMAN
  7698  BLAKE        MANAGER
  7782  CLARK        MANAGER
  7839  KING        PRESIDENT
  7844  TURNER       SALESMAN
  7900  JAMES        CLERK
  7902  FORD        ANALYST

 EMPNO ENAME         JOB
ーーーーー ーーーーーーーーーーー ーーーーーーーーーーー
  7934   MILLER        CLERK

12行が選択されました。

SQL>


また、列名を “*” とすることで、表に構成されているすべての列を出力することができます。

select * from <表名> ;

SQL> select * from salgrade;

  GRADE  LOSAL  HISAL
ーーーーーー ーーーーー ーーーーーー
     1    700     1200
     2    1201     1400
     3    1401     2000
     4    2001     3000
     5    3001     9999

SQL>


[参考]
SQL言語リファレンス – SELECT

set linesize

例えば以下のselect文を実行すると以下のように1つの行が2段になってしまいました。

SQL> select empno,ename,job,mgr,hiredate from emp;

 EMPNO ENAME        JOB          MGR        ★1段
ーーーーー ーーーーーーーーーー ---------- ーーーーーーーーーーー
HIREDATE                                  ★2段
ーーーーーーーー
 7369 SMITH         CLERK          7902
80-12-17
 7499 ALLEN         SALESMAN        7698
81-02-20
 7521 WARD         SALESMAN        7698
81-02-22

 EMPNO ENAME        JOB          MGR
ーーーーー ーーーーーーーーーー ---------- ーーーーーーーーーーー
HIREDATE
ーーーーーーーー
 7566 JONES         MANAGER        7839
81-04-02
 7654 MARTIN        SALESMAN        7698
81-09-28
 7698 BLAKE         MANAGER        7839
81-05-01

 EMPNO ENAME        JOB          MGR
ーーーーー ーーーーーーーーーー ---------- ーーーーーーーーーーー
HIREDATE
ーーーーーーーー
 7782 CLARK         MANAGER        7839
81-06-09
 7839 KING          PRESIDENT
81-11-17
 7844 TURNER        SALESMAN        7698
81-09-08

 EMPNO ENAME        JOB          MGR
ーーーーー ーーーーーーーーーー ---------- ーーーーーーーーーーー
HIREDATE
ーーーーーーーー
 7900 JAMES         CLERK         7698
81-12-03
 7902 FORD          ANALYST        7566
81-12-03
 7934 MILLER         CLERK         7782
82-01-23

12行が選択されました。

SQL>


これでは表の情報が見づらくなってしまいますが、set linesizeを使用することで出力が折り返されずに1行に表示されるように制御することができます。

set linesize <数値>

※<数値>は1行に表示される文字数

SQL> set linesize 1000 ★1行1000文字で設定
SQL> select empno,ename,job,mgr,hiredate from emp;

 EMPNO ENAME        JOB          MGR HIREDATE
ーーーーー ーーーーーーーーーー ーーーーーーーー ーーーーー ーーーーーーーー
  7369  SMITH       CLERK         7902 80-12-17
  7499  ALLEN       SALESMAN       7698 81-02-20
  7521  WARD       SALESMAN       7698 81-02-22
  7566  JONES       MANAGER       7839 81-04-02
  7654  MARTIN      SALESMAN       7698 81-09-28
  7698  BLAKE       MANAGER       7839 81-05-01
  7782  CLARK       MANAGER       7839 81-06-09
  7839  KING       PRESIDENT           81-11-17
  7844  TURNER      SALESMAN       7698 81-09-08
  7900  JAMES       CLERK         7698 81-12-03
  7902  FORD        ANALYST        7566 81-12-03

 EMPNO ENAME        JOB          MGR HIREDATE
ーーーーー ーーーーーーーーーー ーーーーーーーー ーーーーー ーーーーーーーー
  7934  MILLER       CLERK        7782 82-01-23

12行が選択されました。

SQL>


上記のようにset linesizeで表示する行の文字数を調整することで見やすく表示することができました。
set linesizeはset linと略すことも可能です。

例) set lin 1000

[参考]
ユーザーズ・ガイドおよびリファレンス – 12.41.30 SET LIN[ESIZE] {80 | n | WINDOW}

set pagesize

例えば以下のselect文を実行すると以下のように5ページ分の出力になっています。

SQL> select sid,serial#,username,status from v$session;

  SID  SERIAL# USERNAME   STATUS  ★1ページ目
ーーーー ーーーーー ーーーーーーー ーーーーーーーーー
   1  63277           ACTIVE
   2  38212           ACTIVE
   3  58438           ACTIVE
   4  64026           ACTIVE
   5  27392           ACTIVE
   6  32510           ACTIVE
   7  22261           ACTIVE
   8   5937           ACTIVE
   9  44040           ACTIVE
   10  64956           ACTIVE
   11  18441           ACTIVE

  SID  SERIAL# USERNAME   STATUS  ★2ページ目
ーーーー ーーーーー ーーーーーーー ーーーーーーーーー
   12  27366  SYS        ACTIVE
   13  42307           ACTIVE
   14  19318           ACTIVE
   15  34500           ACTIVE
   16  50899           ACTIVE
   17  28430           ACTIVE
   18  37213           ACTIVE
   19  21105           ACTIVE
   20  59825           ACTIVE
   21  10736           ACTIVE
   22  25665           ACTIVE

  SID  SERIAL# USERNAME   STATUS  ★3ページ目
ーーーー ーーーーー ーーーーーーー ーーーーーーーーー
   23   6322           ACTIVE
   25  11608           ACTIVE
   26  45238           ACTIVE
   28  17071           ACTIVE
   29  47638           ACTIVE
   30  30143           ACTIVE
   31  62527           ACTIVE
   32  44672           ACTIVE
   34  37444           ACTIVE
   36  60488           ACTIVE
   37   8277           ACTIVE

  SID  SERIAL# USERNAME   STATUS  ★4ページ目
ーーーー ーーーーー ーーーーーーー ーーーーーーーーー
   39  25201           ACTIVE
   42  52816           ACTIVE
   44  53575           ACTIVE
   46   4047           ACTIVE
   50  45279           ACTIVE
   54  16446           ACTIVE
   62  20097           ACTIVE
   69  56061           ACTIVE
   79  59313           ACTIVE
   80  14820  SYS        ACTIVE
   81  32671           ACTIVE

  SID  SERIAL# USERNAME   STATUS  ★5ページ目
ーーーー ーーーーー ーーーーーーー ーーーーーーーーー
   82  60092           ACTIVE
   89  26287           ACTIVE
   95  60275           ACTIVE
   96  37323           ACTIVE
   97   9715           ACTIVE
  108  56371           ACTIVE

50行が選択されました。

SQL>


SET PAGESIZE コマンドは、SQL*Plusで出力される1ページあたりの行数を指定するための設定です。
これにより、出力が複数ページに分かれる際の行数制御や、ページ毎に表示される列名の頻度を調整できます。

set pagesize <数値>

※<数値>は1ページあたりの最大行数を指定します。

SQL> set pagesize 1000 ★1ページ1000行で設定
SQL> select sid,serial#,username,status from v$session;

  SID  SERIAL# USERNAME   STATUS
ーーーー ーーーーー ーーーーーーー ーーーーーーーーー
   1   63277          ACTIVE
   2   38212          ACTIVE
   3   58438          ACTIVE
   4   64026          ACTIVE
   5   27392          ACTIVE
   6   32510          ACTIVE
   7   22261          ACTIVE
   8    5937          ACTIVE
   9   44040          ACTIVE
   10   64956          ACTIVE
   11   18441          ACTIVE
   12   27366  SYS       ACTIVE
   13   42307          ACTIVE
   14   19318          ACTIVE
   15   34500          ACTIVE
   16   50899          ACTIVE
   17   28430          ACTIVE
   18   37213          ACTIVE
   19   21105          ACTIVE
   20   59825          ACTIVE
   21   10736          ACTIVE
   22   25665          ACTIVE
   23    6322          ACTIVE
   25   11608          ACTIVE
   26   45238          ACTIVE
   28   17071          ACTIVE
   29   47638          ACTIVE
   30   30143          ACTIVE
   31   62527          ACTIVE
   32   44672          ACTIVE
   34   47862          ACTIVE
   36   60488          ACTIVE
   37    8277          ACTIVE
   39   25201          ACTIVE
   42   52816          ACTIVE
   44   53575          ACTIVE
   46    4047          ACTIVE
   48   12873          ACTIVE
   50   45279          ACTIVE
   54   16446          ACTIVE
   62   20097          ACTIVE
   69   56061          ACTIVE
   79   59313          ACTIVE
   80   14820  SYS       ACTIVE
   82   60092          ACTIVE
   85   28656          ACTIVE
   89   26287          ACTIVE
   96   37323          ACTIVE
   97    9715          ACTIVE
  108   34841          ACTIVE
  110   10322          ACTIVE

51行が選択されました。

SQL>


上記のようにset pagesizeで表示する1ページのの行数を調整することで見やすく表示することができました。
set pagesizeはset pagesと略すことも可能です。

例) set pages 1000

また、linesizeとpagesizeは同時に設定することも可能です。

例) set lin 1000 pages 1000

[参考]
ユーザーズ・ガイドおよびリファレンス – 12.41.41 SET PAGES[IZE] {14 | n}

column

set linesizeで1行で表示できる文字数を設定すると、列によっては以下のようにかなり長い文字数になり出力され見にくくなってしまう場合があります。

SQL> set linsize 1000
SQL> select instance_name,family,status from v$instance;

INSTANCE_NAME       FAMILY
         STATUS
ーーーーーーーーーーーーーー ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ーーーーーーーーー

v19
         OPEN

SQL>


そこで clumn を使用して特定の列の表示幅を設定することができます。
以下のように設定します。

<文字列の場合>
column <列名> format a<文字数>

<数値列の場合>
column <列名> format 999999….
※9の数で有効桁数を指定する

SQL> column family format a20 ★
SQL> select instance_name,family,status from v$instance;

INSTANCE_NAME     FAMILY           STATUS
ーーーーーーーーーーーー ーーーーーーーーーーーーーー ーーーーーーーーーーーーー
v19                          OPEN

SQL>

上記のようにcolumnで表示する列の文字数を調整することで見やすく表示することができました。
また、columnはcol、formatはforと省略することも可能です。

例) col <列数> for a<文字数>

[参考]
ユーザーズ・ガイドおよびリファレンス – 12.13 COLUMN

まとめ

SET LINESIZE

  • データが折り返されて表示される問題は、SET LINESIZE コマンドで制御できます。
    • 形式: SET LINESIZE 数値
    • 例: SET LINESIZE 1000

SET PAGESIZE

  • 表示されるページの行数を制御するためには、SET PAGESIZE コマンドを使用します。
    • 形式: SET PAGESIZE 数値
    • 例: SET PAGESIZE 1000

COLUMN

  • 長い列を見やすくするために、特定の列の表示幅を COLUMN コマンドで設定できます。
    • 文字列列の形式: COLUMN 列名 FORMAT a文字数
    • 数値列の形式: COLUMN 列名 FORMAT 999999...

これらの設定を適用することで、SQLの出力をより見やすく、効率的に表示することが可能です。

コメント

タイトルとURLをコピーしました