programmera.net -> oracle -> normal     för utskrift      info@programmera.net

Formattering av utskrift i SQL*Plus

  Kommando    Exempel  Beskrivning
  COLUMN  COLUMN ename FORMAT a5  Kortar ner alla utskrifter av kolumnen ename till 5 tecken.
  HEADING  set HEADING off  Ser till att kolumnernas namn inte skrivs ut.
  LINESIZE  set LINESIZE 120  Skriver ut 120 tecken på varje rad.
  WRAP  set WRAP off  Ser till varje tabellrad endast skrivs på en rad i utskriften.
  BREAK  BREAK ON deptno  När vi sorterar på deptno skrivs inga dubletter ut.
  NULL  set NULL Null  Då en kolumn innehåller NULL skrivs Null ut.
  COLSEP  set COLSEP ";"  Lägger in ett semikolon mellan alla kolumner.

Utskrifter i SQL*Plus kan vara lite svårlästa, men med hjälp av några kommandon kan du bestämma hur du vill att de ska se ut. För att ha något att referera till skriver vi ut innehållet i emp helt oformatterad:
SQL> SELECT * FROM emp;

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM
---------- ---------- --------- ---------- ---------- ---------- ----------
    DEPTNO
----------
      7369 SMITH      CLERK           7902 1980-12-17        800
        20

      7499 ALLEN      SALESMAN        7698 1981-02-20       1600        300
        30

      7521 WARD       SALESMAN        7698 1981-02-22       1250        500
        30


     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM
---------- ---------- --------- ---------- ---------- ---------- ----------
    DEPTNO
----------
      7566 JONES      MANAGER         7839 1981-04-02       2975
        20

      7654 MARTIN     SALESMAN        7698 1981-09-28       1250       1400
        30

      7698 BLAKE      MANAGER         7839 1981-05-01       2850
        30


     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM
---------- ---------- --------- ---------- ---------- ---------- ----------
    DEPTNO
----------
      7782 CLARK      MANAGER         7839 1981-06-09       2450
        10

      7788 SCOTT      ANALYST         7566 1987-04-19       3000
        20

      7839 KING       PRESIDENT            1981-11-17       5000
        10


     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM
---------- ---------- --------- ---------- ---------- ---------- ----------
    DEPTNO
----------
      7844 TURNER     SALESMAN        7698 1981-09-08       1500          0
        30

      7876 ADAMS      CLERK           7788 1987-05-23       1100
        20

      7900 JAMES      CLERK           7698 1981-12-03        950
        30


     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM
---------- ---------- --------- ---------- ---------- ---------- ----------
    DEPTNO
----------
      7902 FORD       ANALYST         7566 1981-12-03       3000
        20

      7934 MILLER     CLERK           7782 1982-01-23       1300
        10


14 rader.


COLUMN

Med kommandot COLUMN kan du bestämma formatet på dina utskrifter. Kommandot har följande syntax:
COLUMN {col} FORMAT {form} [HEADING {head}]
Vi kan miska bredden på en kolumn genom att:
  • För textdatatyper skriver man a#, där # är så många tecken man vill ha.
  • För numeriska datatyper skriver man 99999, där varje 9a representerar en siffra.
Vi formatterar några kolumner i emp:
SQL> COLUMN mgr FORMAT 9999
SQL> COLUMN comm FORMAT 9999
SQL> COLUMN deptno FORMAT 999
SQL> COLUMN ename FORMAT a6
SQL> SELECT * FROM emp;

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

     EMPNO ENAME  JOB         MGR HIREDATE          SAL  COMM DEPTNO
---------- ------ --------- ----- ---------- ---------- ----- ------
      7900 JAMES  CLERK      7698 1981-12-03        950           30
      7902 FORD   ANALYST    7566 1981-12-03       3000           20
      7934 MILLER CLERK      7782 1982-01-23       1300           10

14 rader.

HEADING

Med HEADING kan man stänga av utskriften av kolumnnamnen. Detta är bra om man vill skriva data till en fil som sedan ska importeras i någon annan databas.
set HEADING {on|off}
Se följande exempel:
SQL> set HEADING off
SQL> SELECT * FROM emp;

      7369 SMITH  CLERK      7902 1980-12-17        800           20
      7499 ALLEN  SALESMAN   7698 1981-02-20       1600   300     30
      7521 WARD   SALESMAN   7698 1981-02-22       1250   500     30
      7566 JONES  MANAGER    7839 1981-04-02       2975           20
      7654 MARTIN SALESMAN   7698 1981-09-28       1250  1400     30
      7698 BLAKE  MANAGER    7839 1981-05-01       2850           30
      7782 CLARK  MANAGER    7839 1981-06-09       2450           10
      7788 SCOTT  ANALYST    7566 1987-04-19       3000           20
      7839 KING   PRESIDENT       1981-11-17       5000           10
      7844 TURNER SALESMAN   7698 1981-09-08       1500     0     30
      7876 ADAMS  CLERK      7788 1987-05-23       1100           20
      7900 JAMES  CLERK      7698 1981-12-03        950           30
      7902 FORD   ANALYST    7566 1981-12-03       3000           20

      7934 MILLER CLERK      7782 1982-01-23       1300           10

14 rader.

LINESIZE

Med LINESIZE kan man förändra hur många tecken som skrivs ut på varje rad. Per default skrivs 80 tecken per rad. Om man vill skriva ut data till en fil är det bra att sätta denna variabel till ett mycket högt nummer, så att inte strängar klipps av mitt i.
set LINESIZE {nr}
Se följande exempel:
SQL> set LINESIZE 120
SQL> SELECT * FROM emp;

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

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
      7900 JAMES      CLERK           7698 1981-12-03        950                    30
      7902 FORD       ANALYST         7566 1981-12-03       3000                    20
      7934 MILLER     CLERK           7782 1982-01-23       1300                    10

14 rader.
Vi ser att alla kolumner nu visas på samma rad.
WRAP

Detta kommando ser till att varje tabellrad endast skrivs på en rad i utskriften. Om all text inte får plats klipps den.
set WRAP {on|off}
Vi tittar på ett exempel:
SQL> set WRAP off
SQL> SELECT * FROM emp;
kapad (som begärt) före kolumn DEPTNO


     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM
---------- ---------- --------- ---------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 1980-12-17        800
      7499 ALLEN      SALESMAN        7698 1981-02-20       1600        300
      7521 WARD       SALESMAN        7698 1981-02-22       1250        500
      7566 JONES      MANAGER         7839 1981-04-02       2975
      7654 MARTIN     SALESMAN        7698 1981-09-28       1250       1400
      7698 BLAKE      MANAGER         7839 1981-05-01       2850
      7782 CLARK      MANAGER         7839 1981-06-09       2450
      7788 SCOTT      ANALYST         7566 1987-04-19       3000
      7839 KING       PRESIDENT            1981-11-17       5000
      7844 TURNER     SALESMAN        7698 1981-09-08       1500          0
      7876 ADAMS      CLERK           7788 1987-05-23       1100

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM
---------- ---------- --------- ---------- ---------- ---------- ----------
      7900 JAMES      CLERK           7698 1981-12-03        950
      7902 FORD       ANALYST         7566 1981-12-03       3000
      7934 MILLER     CLERK           7782 1982-01-23       1300

14 rader.
I exemplet ovan ser vi att kolumnen DEPNO inte fick plats och skrivs därför inte ut.
BREAK

Om man sorterar på en speciell kolumn kan man öka läsbarheten genom att använda BREAK, som gör att endast ett av varje unikt värde skrivs ut för den aktuella kolumnen.
BREAK ON {col} [SKIP {nr}]
Ett exempel på BREAK:
SQL> BREAK ON deptno
SQL> SELECT deptno, ename FROM emp ORDER BY deptno;

    DEPTNO ENAME
---------- ----------
        10 CLARK
           KING
           MILLER
        20 SMITH
           ADAMS
           FORD
           SCOTT
           JONES
        30 ALLEN
           BLAKE
           MARTIN

    DEPTNO ENAME
---------- ----------
        30 JAMES
           TURNER
           WARD

14 rader.
Värdet efter SKIP bestämmer hur många rader man ska hoppa ner vid varje nytt värde på col. Vi testar att använda SKIP, för att få en ännu tydligare gruppindelning:
SQL> BREAK ON deptno SKIP 1
SQL> SELECT deptno, ename FROM emp ORDER BY deptno;

    DEPTNO ENAME
---------- ----------
        10 CLARK
           KING
           MILLER

        20 SMITH
           ADAMS
           FORD
           SCOTT
           JONES

        30 ALLEN

    DEPTNO ENAME
---------- ----------
        30 BLAKE
           MARTIN
           JAMES
           TURNER
           WARD


14 rader.

NULL

Per default skriver Oracle inte ut någonting då en kolumn innehåller NULL. Ibland vill man veta om en kolumn innehåller en tom sträng eller NULL. För detta ändamål finns kommandot NULL:
set NULL {text}
När man kör detta kommando kommer text att skrivas då kolumnen innehåller NULL:
SQL> set WRAP off
SQL> set NULL Null
SQL> SELECT * FROM emp;
kapad (som begärt) före kolumn DEPTNO


     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM
---------- ---------- --------- ---------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 1980-12-17        800 Null
      7499 ALLEN      SALESMAN        7698 1981-02-20       1600        300
      7521 WARD       SALESMAN        7698 1981-02-22       1250        500
      7566 JONES      MANAGER         7839 1981-04-02       2975 Null
      7654 MARTIN     SALESMAN        7698 1981-09-28       1250       1400
      7698 BLAKE      MANAGER         7839 1981-05-01       2850 Null
      7782 CLARK      MANAGER         7839 1981-06-09       2450 Null
      7788 SCOTT      ANALYST         7566 1987-04-19       3000 Null
      7839 KING       PRESIDENT Null       1981-11-17       5000 Null
      7844 TURNER     SALESMAN        7698 1981-09-08       1500          0
      7876 ADAMS      CLERK           7788 1987-05-23       1100 Null

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM
---------- ---------- --------- ---------- ---------- ---------- ----------
      7900 JAMES      CLERK           7698 1981-12-03        950 Null
      7902 FORD       ANALYST         7566 1981-12-03       3000 Null
      7934 MILLER     CLERK           7782 1982-01-23       1300 Null

14 rader.

COLSEP

Med COLSEP kan man ändra det värde som skrivs ut mellan kolumnerna på varje rad. Detta kan vara bra om du vill använda datat för att läsa in det i någon annan databas:
set COLSEP {text}
Vi testar detta:
SQL> set WRAP off
SQL> set COLSEP ";"
SQL> SELECT * FROM emp;
kapad (som begärt) före kolumn DEPTNO


     EMPNO;ENAME     ;JOB      ;       MGR;HIREDATE  ;       SAL;      COMM
----------;----------;---------;----------;----------;----------;----------
      7369;SMITH     ;CLERK    ;      7902;1980-12-17;       800;
      7499;ALLEN     ;SALESMAN ;      7698;1981-02-20;      1600;       300
      7521;WARD      ;SALESMAN ;      7698;1981-02-22;      1250;       500
      7566;JONES     ;MANAGER  ;      7839;1981-04-02;      2975;
      7654;MARTIN    ;SALESMAN ;      7698;1981-09-28;      1250;      1400
      7698;BLAKE     ;MANAGER  ;      7839;1981-05-01;      2850;
      7782;CLARK     ;MANAGER  ;      7839;1981-06-09;      2450;
      7788;SCOTT     ;ANALYST  ;      7566;1987-04-19;      3000;
      7839;KING      ;PRESIDENT;          ;1981-11-17;      5000;
      7844;TURNER    ;SALESMAN ;      7698;1981-09-08;      1500;         0
      7876;ADAMS     ;CLERK    ;      7788;1987-05-23;      1100;

     EMPNO;ENAME     ;JOB      ;       MGR;HIREDATE  ;       SAL;      COMM
----------;----------;---------;----------;----------;----------;----------
      7900;JAMES     ;CLERK    ;      7698;1981-12-03;       950;
      7902;FORD      ;ANALYST  ;      7566;1981-12-03;      3000;
      7934;MILLER    ;CLERK    ;      7782;1982-01-23;      1300;

14 rader.