列ヘッダーを表示する場合は、デフォルトのヘッダーを使用するか、またはデフォルトのヘッダーをCOLUMNコマンドで変更できます。次の各項では、デフォルトのヘッダーの導出方法およびCOLUMNコマンドを使用してデフォルトのヘッダーを変更する方法について説明します。詳細は、「COLUMN」コマンドを参照してください。
次の形式でCOLUMNコマンドのHEADING句を使用すると、さらに有効な列ヘッダーを定義できます。
COLUMN column_name HEADING column_heading
LAST NAME MONTHLY SALARY COMMISSION ------------------------- -------------- ---------- Russell 14000 .4 Partners 13500 .3 Errazuriz 12000 .3 Cambrault 11000 .3 Zlotkey 10500 .2
注意:
新しいヘッダーは、別のヘッダーを入力するか、列の書式をリセットするか、またはSQL*Plusを終了するまで有効です。
列ヘッダーを複数の単語に変更するには、COLUMNコマンドの入力時に、新しいヘッダーを一重引用符または二重引用符で囲みます。列ヘッダーを複数の行に表示するには、新しい行を開始する位置に垂直バー(|)を使用します。(SETコマンドのHEADSEP変数の設定を変更すると、垂直バー以外の文字を使用できます。詳細は、「SET」コマンドを参照してください。)
LAST MONTHLY NAME SALARY COMMISSION ------------------------- ---------- ---------- Russell 14000 .4 Partners 13500 .3 Errazuriz 12000 .3 Cambrault 11000 .3 Zlotkey 10500 .2
LAST MONTHLY NAME SALARY COMMISSION ========================= ========== ========== Russell 14000 .4 Partners 13500 .3 Errazuriz 12000 .3 Cambrault 11000 .3 Zlotkey 10500 .2
この時点で、次のように下線文字をダッシュに戻してください。
SET UNDERLINE '-'
注意:
ダッシュは、引用符で囲む必要があります。囲まない場合、ダッシュは、次の行へコマンドを継続することを示すハイフンとして解釈されます。
例6-1 列ヘッダーの変更
LAST_NAME、SALARYおよびCOMMISSION_PCTに新しいヘッダーを指定してEMP_DETAILS_VIEWからレポートを生成するには、次のコマンドを入力します。
COLUMN LAST_NAME HEADING 'LAST NAME' COLUMN SALARY HEADING 'MONTHLY SALARY' COLUMN COMMISSION_PCT HEADING COMMISSION SELECT LAST_NAME, SALARY, COMMISSION_PCT FROM EMP_DETAILS_VIEW WHERE JOB_ID='SA_MAN';
例6-2 列ヘッダーの分割
SALARYおよびLAST_NAME列にそれぞれMONTHLY SALARYおよびLAST NAMEというヘッダーを付け、新しいヘッダーを2行に分割するには、次のように入力します。
COLUMN SALARY HEADING 'MONTHLY|SALARY' COLUMN LAST_NAME HEADING 'LAST|NAME'
この時点で、次のように/(スラッシュ)コマンドで問合せを再実行します。
/
例6-3 下線文字の設定
ヘッダーに下線を付けるために使用する文字を等号に変更し、問合せを再実行するには、次のコマンドを入力します。
SET UNDERLINE = /
NUMBER列を表示する場合は、SQL*Plusのデフォルトの表示幅を使用するか、またはCOLUMNコマンドを使用してデフォルトの表示幅を変更します。次の各項では、デフォルトの表示およびCOLUMNコマンドでデフォルトを変更する方法について説明します。書式モデルは、新しい書式モデルを入力するか、または次のコマンドを使用して列の書式をリセットするまで有効です。
COLUMN column_name CLEAR
または、SQL*Plusを終了するまで有効です。
NUMBER列の幅は、ヘッダーの幅か、FORMATの幅に符号用の1つの空白を加えた幅のどちらか大きい方に等しくなります。明示的にFORMATを使用しない場合、列の幅は、常にSET NUMWIDTHの値以上になります。
通常、SQL*Plusでは、数値は、SETコマンドのNUMWIDTH変数の値で決まる標準表示幅(通常は10)を最大幅として、必要なだけの桁数で表示されます。可能な場合、SET NUMWIDTHの値より大きい数値は、許容最大文字数で切り上げられるか、または切り捨てられます。数値が大きすぎる場合は、ハッシュが表示されます。
COLUMNコマンドで書式モデルを使用すると、NUMBER列に別の書式を選択できます。書式モデルとは、列の中に数値を表示する方法を表したもので、複数の9を使用して数字の桁を表します。
COLUMNコマンドを使用すると、次に示すように、書式を設定する列および使用するモデルを識別できます。
COLUMN column_name FORMAT model
列の中の数値にカンマ、ドル記号、山カッコ(負の値を囲む)、および先行0(ゼロ)を追加するには、書式モデルを使用します。値を一定の小数桁数まで丸め、負の値の右側(左側でなく)にマイナス記号を表示し、指数表記で値を表示することもできます。
単一の列に複数の書式モデルを使用するには、使用するモデルを結合して1つのCOLUMNコマンドにします(例6-4を参照)。書式モデルのすべてのリストおよび詳細は、「COLUMN」を参照してください。
LAST MONTHLY NAME SALARY COMMISSION ------------------------- -------- ---------- Russell $14,000 .4 Partners $13,500 .3 Errazuriz $12,000 .3 Cambrault $11,000 .3 Zlotkey $10,500 .2
ドル記号などの他の書式を使用し、0(ゼロ)値に空白ではなく0(ゼロ)を表示する場合は、表示する値として書式モデル内で0(ゼロ)を使用します。
データ型を表示する場合は、SQL*Plusのデフォルトの表示幅を使用するか、またはCOLUMNコマンドを使用してデフォルトの表示幅を変更します。書式モデルは、新しい書式モデルを入力するか、または次のコマンドを使用して列の書式をリセットするまで有効です。
COLUMN column_name CLEAR
または、SQL*Plusを終了するまで有効です。このマニュアルでは、データ型に次の型が含まれます。
データ型列のデフォルトの幅は、データベース内の列の幅です。LONG列、BLOB列、BFILE列、CLOB列、NCLOB列またはXMLType列のデフォルトの幅は、SET LONGCHUNKSIZEまたはSET LONGのいずれか小さい方の値です。
SQL*Plusでは、書式が設定されていないDATE列のデフォルトの幅と書式は、データベースのNLS_DATE_FORMATパラメータによって決定されます。それ以外の場合、デフォルトの書式の幅はA9です。DATE列の書式設定の詳細は、「COLUMN」コマンドのFORMAT句を参照してください。
データ型のデフォルトの文字位置は、左揃えです。
データ型またはDATEの表示幅は、COLUMNコマンドと、文字A(英数字の意)の後に列幅を表す数値を続けた書式モデルを使用して変更できます。
COLUMNコマンド内で、書式を設定する列および使用するモデルを次のように指定します。
COLUMN column_name FORMAT model
列ヘッダーより短い幅を指定した場合は、ヘッダーが切り捨てられます。詳細は、「COLUMN」コマンドを参照してください。
LAST MONTHLY NAME SALARY COMMISSION ---- -------- ---------- Russ $14,000 .4 ell Part $13,500 .3 ners Erra $12,000 .3 zuri z LAST MONTHLY NAME SALARY COMMISSION ---- -------- ---------- Camb $11,000 .3 raul t Zlot $10,500 .2 key
SETコマンドのWRAP変数をON (デフォルト値)に設定した場合、例6-5に示すように、従業員名は4文字目の後で次の行へ折り返されます。WRAPをOFFに設定した場合、名前は4文字目の後で切り捨てられます。
システム変数WRAPは、すべての列を制御します。列に対するWRAPの設定は、COLUMNコマンドのWRAPPED、WORD_WRAPPEDおよびTRUNCATED句を指定すると上書きできます。これらの句の詳細は、「COLUMN」コマンドを参照してください。この章の後半でCOLUMNコマンドのWORD_WRAPPEDを使用します。
NCLOB、BLOB、BFILEまたはマルチバイトCLOBの各列をWORD_WRAPPEDオプションで書式設定することはできません。NCLOB、BLOB、BFILEまたはマルチバイトCLOBの各列をCOLUMN WORD_WRAPPEDで書式設定した場合、列データはCOLUMN WRAPPEDが適用されたかのように動作します。
注意:
列のヘッダーは、WRAPの設定、またはどのCOLUMNコマンド句の設定にも関係なく切り捨てられます。
この時点で、次のように列を元の書式に戻します。
COLUMN LAST_NAME FORMAT A10
Building -------------------- Owned
createXML、extract、text、getStringValの各ファンクション、およびXMLTypeデータの作成と操作の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。
例6-5 文字列の書式設定
LAST_NAME列の幅を4文字に設定し、現行の問合せを再実行するには、次のように入力します。
COLUMN LAST_NAME FORMAT A4 /
例6-6 XMLType列の書式設定
XMLType列の書式設定方法について説明する前に、XMLType列の定義を含む表を作成し、その表にデータを挿入する必要があります。XMLType列は、他のユーザー定義列と同様の方法で作成できます。XMLType列を含む表を作成するには、次のように入力します。
CREATE TABLE warehouses ( warehouse_id NUMBER(3), warehouse_spec SYS.XMLTYPE, warehouse_name VARCHAR2 (35), location_id NUMBER(4));
warehouse_idおよびwarehouse_specの値を含む新しいレコードを新しいwarehouses表に挿入するには、次のように入力します。
INSERT into warehouses (warehouse_id, warehouse_spec) VALUES (100, sys.XMLTYPE.createXML( '<Warehouse whNo="100"> <Building>Owned</Building> </Warehouse>'));
XMLType列の幅を20文字に設定し、XMLType列を選択するには、次のように入力します。
COLUMN Building FORMAT A20 SELECT w.warehouse_spec.extract('/Warehouse/Building/text()').getStringVal() "Building" FROM warehouses w;
複数の列に同じ表示属性を設定する場合は、COLUMNコマンドのLIKE句を使用して入力すると、コマンドの長さを短くすることができます。LIKE句を使用すると、SQL*Plusで、前に定義した列の表示属性が新しい列にコピーされます。ただし、同じコマンドの別の句によって加えられた変更はコピーされません。
LAST MONTHLY NAME SALARY BONUS ---------- -------- -------- Russell $14,000 $0 Partners $13,500 $0 Errazuriz $12,000 $0 Cambrault $11,000 $0 Zlotkey $10,500 $0
例6-7 列の表示属性のコピー
COMMISSION_PCT列に、SALARYに指定した表示属性と同じ表示属性を指定し、別のヘッダーを指定するには、次のコマンドを入力します。
COLUMN COMMISSION_PCT LIKE SALARY HEADING BONUS
次のように問合せを再実行します。
/
列の現行の表示属性を表示するには、次に示すように、COLUMNコマンドおよびその後に列名のみを指定します。
COLUMN column_name
すべての列の現行の表示属性を表示するには、次のように、後ろに列名または句を指定せずにCOLUMNコマンドを入力します。
COLUMN
列の表示属性をデフォルト値にリセットするには、次に示すようにCOLUMNコマンドのCLEAR句を使用します。
COLUMN column_name CLEAR
columns cleared
例6-8 列の表示属性をデフォルトにリセットする方法
すべての列の表示属性をデフォルトにリセットするには、次のように入力します。
CLEAR COLUMNS
前述のとおり、SQL*Plusのデフォルトでは、列の値が列幅に収まらない場合、その値は追加行に折り返されます。折り返された出力行の後(または各行の後)にレコード・セパレータ文(字または空白の1行)を挿入する場合は、SETコマンドのRECSEPおよびRECSEPCHAR変数を使用します。
RECSEPを使用して、文字の行を出力するタイミングを決定できます。RECSEPをEACHに設定すると、各行の後に文字の行が出力されます。WRAPPEDに設定すると、折返し行の後に出力されます。OFFに設定すると、出力されません。RECSEPのデフォルトの設定は、WRAPPEDです。
RECSEPCHARは、各行に出力される文字を設定します。RECSEPCHARには、任意の文字を設定できます。
列の値が次の行に折り返される場合は、すべての単語を次の行に折り返すこともできます。この場合は、次に示すように、COLUMNコマンドのWORD_WRAPPED句を使用します。
COLUMN column_name WORD_WRAPPED
LAST_NAME JOB_TITLE CITY ------------------------- -------------------- -------- King President Seattle Kochhar Administration Vice Seattle President ------------------------------------------------------- De Haan Administration Vice Seattle President ------------------------------------------------------- Russell Sales Manager Oxford Partners Sales Manager Oxford Hartstein Marketing Manager Toronto 6 rows selected.
RECSEPをEACHに設定した場合、各行の後(この例では各部門の後)に文字の行が出力されます。
先へ進む前に、次のようにRECSEPをOFFに設定して、レコード・セパレータを出力しないようにします。
SET RECSEP OFF
例6-9 折り返した列の値の後で文字の行を出力する方法
列の値を折り返した後にダッシュの行を出力するには、次のコマンドを入力します。
SET RECSEP WRAPPED SET RECSEPCHAR "-"
最後に、次の問合せを入力します。
SELECT LAST_NAME, JOB_TITLE, CITY FROM EMP_DETAILS_VIEW WHERE SALARY>12000;
この時点で、次のようにJOB_TITLE列の幅を制限し、必要な場合は、SQL*Plusですべての単語を次の行に折り返します。
COLUMN JOB_TITLE FORMAT A20 WORD_WRAPPED
次のように問合せを実行します。
/