13.14 COLUMN

構文

COL[UMN] [{column | expr} [option ...]]

optionは、次のいずれかの句を表します。

ALI[AS] alias BOOL[EAN]{YES [NO]} CLE[AR] ENTMAP {ON | OFF} FOLD_A[FTER] FOLD_B[EFORE] FOR[MAT] format HEA[DING] text JUS[TIFY] {L[EFT] | C[ENTER] | R[IGHT]} LIKE {expr | alias} NEWL[INE] NEW_V[ALUE] variable NOPRI[NT] | PRI[NT] NUL[L] text OLD_V[ALUE] variable ON | OFF WRA[PPED] | WOR[D_WRAPPED] | TRU[NCATED]

特定の列について次のような表示属性を指定します。

  • 列ヘッダーのテキスト

  • 列ヘッダーの位置

  • NUMBERデータの書式

  • 列データの折返し

  • デフォルトのBOOLEANの変更

また、1つまたはすべての列の現行の表示属性も表示します。

指定した列または式についてのみ現行の表示属性を表示するには、columnまたはexprを指定してCOLUMNを入力します(その他の句は使用しません)。現行のすべての列表示属性を表示するには、句を指定せずにCOLUMNを入力します。

{column | expr}

列コマンドが参照する、SQL SELECTコマンド内のデータ項目を指示します(通常は列の名前)。COLUMNコマンドの中で式を使用する場合は、SELECTコマンドでの表示と同じようにexprを入力する必要があります。たとえば、SELECTコマンドの中の式がa+bである場合、COLUMNコマンドの中でb+aまたは(a+b)を使用してSELECTコマンドの中の式を参照することはできません。

異なる表から同じ名前の列を選択すると、その列名を指定したCOLUMNコマンドは両方の列に適用されます。つまり、LAST_NAME列に対するCOLUMNコマンドは、このセッションで参照するLAST_NAMEという名前のすべての列に適用されます。COLUMNは、SELECTコマンドの表名接頭辞を無視します。また、名前が二重引用符で囲まれている場合を除き、空白も無視されます。

列を別々に書式設定するには、SELECTコマンド自体の中で各列にそれぞれ一意の別名を割り当て(COLUMNコマンドのALIAS句は使用しないでください)、各列の別名を指定してCOLUMNコマンドを入力します。

ALI[AS] alias

指定した別名が列に割り当てられます。この別名は、BREAKCOMPUTEおよび他のCOLUMNコマンドでその列を参照するために使用できます。

CLE[AR]

列の表示属性がデフォルト値にリセットされます。

すべての列の属性をリセットするには、CLEAR COLUMNSコマンドを使用します。CLEAR COLUMNSでは、該当する列のATTRIBUTEも消去されます。

ENTMAP {ON | OFF}

HTML出力で選択された列に対して、エンティティのマッピングのONまたはOFFを指定します。この機能を使用すると、たとえば、同じレポートの別の列にエンティティをマッピングしていても、データの列にHTMLのハイパーリンクを含むことができます。HTMLのハイパーリンクを含む列に対してエンティティのマッピングをOFFにすると、HTMLのアンカー・タグのデリミタ、<>"および&が、レポートで正しく解釈されます。ONにすると、それぞれのエンティティ&lt;&gt;&quot;および&amp;に置き換えられ、WebブラウザがHTMLを正しく解釈できなくなります。

列ヘッダーおよびCOMPUTEラベルのエンティティ、または列に表示される出力は、列のENTMAPの値に従ってマップされるか、またはマップされません。

COLUMN ENTMAPのデフォルト設定は、MARKUP HTML ENTMAPオプションの現行の設定です。

MARKUP HTML ENTMAPオプションの詳細は、SET MARKUPオプションを参照してください。

FOLD_A[FTER]

列ヘッダーの後と列の各行の後に改行を挿入します。SQL*Plusは、SELECTリストの最後の列の後に余分な改行を挿入しません。FOLD_A[FTER]は、PREFORMATONに設定されている場合を除き、SET MARKUP HTML ONモードでは動作しません。

FOLD_B[EFORE]

列ヘッダーの前と列の各行の前に改行を挿入します。SQL*Plusは、SELECTリストの最初の列の前に余分な改行を挿入しません。FOLD_A[FTER]は、PREFORMATONに設定されている場合を除き、SET MARKUP HTML ONモードでは動作しません。

FOR[MAT] format

列の表示書式を指定します。指定する書式は、A10または$9,999などのテキスト定数である必要があります。

文字列

CHARNCHARVARCHAR2 (VARCHAR)およびNVARCHAR2 (NCHAR VARYING)列のデフォルトの幅は、データベース内の列の幅です。SQL*Plusは、これらのデータ型を左揃えで書式設定します。値が列幅に収まらない場合、SQL*Plusは、SET WRAPの設定に応じて文字列を折り返すか切り捨てます。

LONGBLOBBFILECLOBNCLOBXMLTypeまたはJSON列のデフォルトの幅は、SET LONGCHUNKSIZEまたはSET LONGのいずれか小さい方の値です。

データ型の幅をnに変更するには、FORMAT Anを使用します。(Aはアルファベットを表します。)列ヘッダーより短い幅を指定した場合は、SQL*Plusではヘッダーが切り捨てられます。

SQL*Plusは、2000バイトの後のXMLType列を切り捨てるか折り返します。これを回避するには、XMLType列にCOLUMNの書式を明示的に設定する必要があります。COLUMNの書式は、1行当たり最大60000にできます。

DATE列

SQL*Plusでは、書式が設定されていないDATE列のデフォルトの幅と書式は、NLS_DATE_FORMATパラメータから導出されます。NLS_DATE_FORMATの設定は、NLSの地域パラメータによって決定されます。たとえば、NLSの地域がアメリカ合衆国のデフォルト書式はDD-Mon-RRで、デフォルトの幅はA9です。NLSパラメータは、データベースのパラメータ・ファイル内で設定される場合と、環境変数やそれに相当するプラットフォーム固有メカニズムで設定される場合があります。また、NLSパラメータは、ALTER SESSIONコマンドによってセッションごとに指定することもできます。DATE書式とNLSパラメータの詳細は、Oracle Database SQL言語リファレンスを参照してください。

SQL SELECT文の中でSQL関数TO_CHARを使用して、DATE列の書式を変更できます。明示的なCOLUMN FORMATコマンドを使用して、列幅を調整することもできます。

Oracle Databaseでは、TO_CHARのようなSQL関数を使用するときに、非常に幅の広い列が自動的に使用できるようになります。デフォルトの列幅は、SQL*Plusおよびデータベースで使用されている文字セットによって異なります。複数の文字セットを使用している場合にスクリプトの移植性を最大限にするには、Oracle Databaseで、選択した列ごとにCOLUMN FORMATを使用することをお薦めします。

DATE列の幅をnに変更するには、FORMAT Anを指定したCOLUMNコマンドを使用します。列ヘッダーより短い幅を指定した場合は、ヘッダーが切り捨てられます。

NUMBER列

数値列では、SET NUMFORMAT設定(SET NUMWIDTH設定より優先)よりCOLUMN FORMAT設定が優先されます。

「SET NUMF[ORMAT] format」および「SET NUM[WIDTH] {10 | n}」を参照してください。

NUMBER列の幅を変更するには、FORMATの後に、表13-1に指定された要素を使用します。

表13-1 数値書式

要素 説明

, (カンマ)

9,999

指定した位置にカンマが表示されます。

. (ピリオド)

99.99

数値の整数部と小数部を区切るピリオド(小数点)が表示されます。

$

$9999

先行ドル記号が表示されます。

0

0999
9990

先行ゼロが表示されます。後続ゼロが表示されます。

9

9999

9の数で指定した桁数の値が表示されます。値には、正の値の場合は先行空白、負の値の場合は先頭に先行マイナス記号が表示されます。先行0(ゼロ)には空白が表示されます。0(ゼロ)の値には0(ゼロ)が表示されます。

B

B9999

書式モデル内の0(ゼロ)にかかわらず、整数部が0(ゼロ)の場合、固定小数点数の整数部に空白が表示されます。

C

C999

指定した位置にISO通貨記号が表示されます。

D

99D99

数値の整数部と小数部を区切る小数点文字が表示されます。

EEEE

9.999EEEE

値が科学表記法で表示されます(書式には確実に4つの「E」を含める必要があります)。

G

9G999

数値の整数部の指定した位置に桁グループ・セパレータが表示されます。

L

L999

指定した位置に各国通貨記号が表示されます。

MI

9999MI

負の値の後に後続マイナス記号が表示されます。正の値の後に後続空白が表示されます。

PR

9999PR

負の値は<山カッコ>で囲まれて表示されます。正の値の場合は、先行空白および後続空白が表示されます。

RN rn

RN
rn

大文字のローマ数字が表示されます。小文字のローマ数字が表示されます。値は1から3999の整数となります。

S

S9999
9999S

先行マイナス記号またはプラス記号が表示されます。後続マイナス記号またはプラス記号が表示されます。

TM

TM

小数点文字の最小の数が表示されます。デフォルトはTM9です。出力に使用される固定表記法の場合は最大64文字、科学表記法の場合は65文字以上です。TMの前に他の要素を指定することはできません。TMの後には単一の9またはEのみを指定できます。

U

U9999

指定した位置に、第2通貨記号が表示されます。

V

999V99

10nを掛けた値が表示されます。nは、「V」の後の「9」の数です。

X

XXXX
xxxx

指定した桁数の四捨五入された値が16進数値で表示されます。

MIおよびPR書式要素が使用できるのは、数値書式モデルの最後の桁のみです。S書式要素が使用できるのは、最初または最後の桁のみです。

数値書式モデルにMISまたはPR書式が含まれていない場合、負の戻り値には自動的に先行負記号が含まれ、正の値には自動的に先行空白が含まれます。

1つの数値書式モデルに挿入できる小数点文字(D)またはピリオド(.)は1つのみです。ただし、桁グループ・セパレータ(G)またはカンマ(,)は、2つ以上挿入できます。数値書式モデル内で、小数点文字またはピリオドより右側に、グループ・セパレータまたはカンマを使用することはできません。

SQL*Plusは、NUMBERデータを右揃えで書式設定します。NUMBER列の幅は、ヘッダーの幅か、FORMATの幅に符号用の1つの空白を加えた幅のどちらか大きい方に等しくなります。明示的にCOLUMN FORMATまたはSET NUMFORMATを使用しない場合、常に、列の幅はSET NUMWIDTHの値以上になります。

SQL*Plusは、書式またはフィールド幅にあわせてNUMBERデータを四捨五入する場合があります。

値が列に収まらない場合、SQL*Plusは数字のかわりにシャープ記号(#)を表示します。

正の値が極端に大きく、数値の四捨五入の際に数値オーバーフローが発生する場合は、値のかわりに無限大記号(~)が表示されます。同様に、負の値が極端に小さく、数値の四捨五入の際に数値オーバーフローが発生する場合は、値のかわりに負の無限大記号(-~)が表示されます。

HEA[DING] text

ヘッダーを定義します。HEADING句を使用しない場合、デフォルトの列ヘッダーは、columnまたはexprです。text空白または句読点文字が含まれている場合は、一重または二重引用符でそのテキストを囲む必要があります。HEADSEP文字(デフォルトでは「|」)が発生するたびに、新しい行が始まります。

たとえば、

COLUMN LAST_NAME HEADING 'Employee |Name'

この場合は、2行の列ヘッダーが生成されます。

HEADSEP文字の変更については、SET HEADS[EP] { | c | ON | OFF}を参照してください。

JUS[TIFY] {L[EFT] | C[ENTER] | R[IGHT]}

ヘッダーを整列させます。JUSTIFY句を使用しない場合、NUMBER列のヘッダーのデフォルトはRIGHTで、その他の列型のヘッダーのデフォルトはLEFTです。

LIKE {expr | alias} 

他の列または式(他のCOLUMNコマンドですでに属性を定義してあるもの)の表示属性がコピーされます。LIKEによってコピーされるのは、現行のCOLUMNコマンド内の他の句で定義されていない属性のみです。

NEWL[INE]

列の値を表示する前に新しい行を開始します。NEWLINEFOLD_BEFOREと同じ効果があります。NEWL[INE]は、PREFORMATがSET ONでないかぎり、SET MARKUP HTML ONモードで機能しません。

NEW_V[ALUE] variable

を保持する変数を指定します。この変数は、TTITLEコマンドの中で参照できます。NEW_VALUEは、列値または日付を上部タイトルに表示するために使用します。この列は、SKIP PAGEアクションを伴うBREAKコマンドに挿入しておく必要があります。変数名にシャープ記号(#)は挿入できません。

NEW_VALUEは、各ページに新しいプライマリ・レコードがあるプライマリ/ディテール・レポートの場合に役立ちます。プライマリ/ディテール・レポートを作成するには、ORDER BY句にもこの列を挿入しておく必要があります。この項の終わりに記載されている例を参照してください。

NEW_V[ALUE]で指定された変数は、TTITLEを実行する前に展開されます。生成された文字列はTTITLEテキストとして格納されます。後続の各レポート・ページの生成中に予期しない結果が発生して、展開された変数の値自身が変数として解釈される場合があります。

TTITLEコマンドでのこの二重置換は、各レポート・ページで置換されるNEW_V[ALUE]変数に&接頭辞を使用しないことで回避できます。置換変数を使用してTTITLEに未変更のテキストを挿入する場合は、1回のみ置換されるようにテキストを引用符で囲みます。

下部タイトルに列値を表示する方法については、次のOLD_V[ALUE]変数を参照してください。タイトル内の変数の参照については、「TTITLE」コマンドを参照してください。書式設定および有効な書式モデルについては、前述のFOR[MAT]書式を参照してください。

NOPRI[NT] | PRI[NT]

列(列ヘッダーおよび選択したすべての値)の印刷を制御します。NOPRINTを指定すると、列の画面表示および印刷は行われません。PRINTを指定すると、列の印刷がONになります。

NUL[L] text

SQL*Plusによって特定の列にNULL値として表示されるテキストを制御します。デフォルトは空白です。SET NULLは、すべての列のすべてのnull値のかわりに表示されるテキストを制御します。ただし、COLUMNコマンドのNULL句に指定した列には適用されません。NULL値を選択すると、変数の型は常にCHARになるので、SET NULLテキストをその変数に格納できます。

OLD_V[ALUE] variable

列値を保持する変数を指定します。この変数は、BTITLEコマンドの中で参照できます。OLD_VALUEは、下部タイトルに列値を表示するために使用します。この列は、SKIP PAGEアクションを伴うBREAKコマンドに挿入しておく必要があります。

OLD_VALUEは、各ページに新しいプライマリ・レコードがあるプライマリ/ディテール・レポートの場合に役立ちます。プライマリ/ディテール・レポートを作成するには、ORDER BY句にもこの列を挿入しておく必要があります。

OLD_V[ALUE]で指定された変数は、BTITLEを実行する前に展開されます。生成された文字列はBTITLEテキストとして格納されます。後続の各レポート・ページの生成中に予期しない結果が発生して、展開された変数の値自身が変数として解釈される場合があります。

BTITLEコマンドでのこの二重置換は、各レポート・ページで置換されるOLD_V[ALUE]変数に&接頭辞を使用しないことで回避できます。置換変数を使用してBTITLEに未変更のテキストを挿入する場合は、1回のみ置換されるようにテキストを引用符で囲みます。

上部タイトルに列値を表示する方法については、NEW_V[ALUE]変数を参照してください。タイトル内の変数の参照については、「TTITLE」コマンドを参照してください。

ON | OFF

列の表示特性の状態を制御します。OFFを指定すると、属性の定義に影響を与えることなく列の属性が非表示にされます。ONを指定すると、属性が表示されます。

WRA[PPED] | WOR[D_WRAPPED] | TRU[NCATED]

SQL*Plusで、列の幅が大きすぎるデータ型またはDATE文字列をどのように処理するかを指定します。WRAPPEDを指定すると、列の境界内で文字列が折り返され、必要に応じて新しい行が開始されます。WORD_WRAPが使用可能な場合、SQL*Plusは、組込みの改行文字を含むすべての先行空白(リターン、改行文字、タブ、空白など)をスキップして、各行を左揃えにします。行の境界上にない組込み空白はスキップされません。TRUNCATEDを指定すると、最初の表示行の終わりの文字列が切り捨てられます。

NCLOBBLOBBFILEまたはマルチバイトCLOBの各列をWORD_WRAPPEDで書式設定することはできません。NCLOBBLOBBFILEまたはマルチバイトCLOBの各列をCOLUMN WORD_WRAPPEDで書式設定した場合、列データはCOLUMN WRAPPEDが適用されたかのように動作します。

BOOLEAN列

リリース23c以降、BOOLEANデータ型のCOLUMNコマンドは、データベースから返される値の出力形式を、TRUEまたはFALSE以外の別のテキスト・リテラルに設定します。

構文

COLUMN column BOOLEAN TEXT1 [TEXT2]

説明

TEXT1は、データベースから返されるBOOLEANTRUEを表すテキストです。これは必須の値です。

TEXT2は、データベースから返されるBOOLEAN value FALSEを表すオプション値です。TEXT2が指定されていない場合、データベースから返される値が表示されます。

BOOLEAN値の詳細は、Oracle Database SQL言語リファレンスを参照してください。

使用方法

入力したCOLUMNコマンドによって、複数のSQL SELECTコマンドについて列の表示属性を制御できます。

1つ以上の列について、COLUMNコマンドをいくつでも入力できます。列をOFFに切り替えるか、CLEAR COLUMN コマンドを使用しないかぎり、各列について設定されているすべての列属性がセッションの終わりまで有効になります。

同じ列について複数のCOLUMNコマンドを入力すると、SQL*Plusは、それらのコマンドのすべての句をまとめて適用します。いくつかのCOLUMNコマンドで、同じ列に対して同じ句が適用される場合は、最後に入力した句によって出力が制御されます。

LAST_NAMEの幅を20文字にし、EMPLOYEE NAMEを列ヘッダーとして2行に表示するには、次のように入力します。

COLUMN LAST_NAME FORMAT A20 HEADING 'EMPLOYEE|NAME'

SALARY列の書式を次のように入力すると、100万ドルの位まで表示し、セントの単位で四捨五入し、3桁区切りにカンマを使用します。値が0(ゼロ)の場合は$0.00と表示します。

COLUMN SALARY FORMAT $9,999,990.99

長い式を含む列に別名NETを割り当て、結果をドル書式で表示し、null値には<NULL>を表示できます。

COLUMN SALARY+COMMISSION_PCT+BONUS-EXPENSES-INS-TAX ALIAS NET
COLUMN NET FORMAT $9,999,999.99 NULL '<NULL>'

この例では、この列指定を2つのコマンドに分けています。最初のコマンドは別名NETを定義し、2番目のコマンドはNETを使用して書式を定義しています。

また、最初のコマンドでは、SELECT文で入力したとおり、正確に式を入力する必要があります。そうしないと、SQL*Plusは、COLUMNコマンドを適正な列に対応付けることができません。

REMARKSという名前の列の長い値は、次のように折り返せます。

COLUMN REMARKS FORMAT A20 WRAP
CUSTOMER     DATE        QUANTITY REMARKS
----------   ---------   -------- --------------------
123          25-AUG-2001 144      This order must be s
                                  hipped by air freigh
                                  t to ORD

WRAPWORD_WRAPで置換した場合、REMARKS列は次のようになります。

CUSTOMER     DATE        QUANTITY   REMARKS
----------   ---------   --------   ---------------------
123          25-AUG-2001 144        This order must be
                                    shipped by air freight
                                    to ORD

TRUNCATEを指定した場合、REMARKS列は次のようになります。

CUSTOMER     DATE        QUANTITY   REMARKS
----------   ---------   --------   --------------------
123          25-AUG-2001 144        This order must be s

現在の日付および各職種の名前を上部タイトルに出力するには、次のように入力します。EMP_DETAILS_VIEWのかわりに、HRスキーマのEMPLOYEES表を使用します。

日付変数の作成方法の詳細は、タイトル内に現在の日付を表示する方法についてを参照してください。

2ページにわたるレポートは次のようになり、「Job Report」が現行linesizeの中央に配置されています。

COLUMN JOB_ID NOPRINT NEW_VALUE JOBVAR
COLUMN TODAY  NOPRINT NEW_VALUE DATEVAR
BREAK ON JOB_ID SKIP PAGE ON TODAY
TTITLE CENTER 'Job Report' RIGHT DATEVAR  SKIP 2 -
LEFT 'Job:     ' JOBVAR SKIP 2
SELECT TO_CHAR(SYSDATE, 'MM/DD/YYYY') TODAY,
LAST_NAME, JOB_ID, MANAGER_ID, HIRE_DATE, SALARY, DEPARTMENT_ID
FROM EMPLOYEES WHERE JOB_ID IN ('MK_MAN', 'SA_MAN')
ORDER BY JOB_ID, LAST_NAME;

DATE列のデフォルトの書式をYYYY-MM-DDに変更できます。

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';
Session altered.

SELECT文を実行して変更を表示します。

SELECT HIRE_DATEFROM EMPLOYEESWHERE EMPLOYEE_ID = 206;

次のような出力結果が表示されます。

Job Report                         04/19/01

Job:     SA_MAN

HIRE_DATE
----------
1994-06-07

ALTER SESSIONコマンドの詳細は、ALTER SESSIONを参照してください。

COL1のデフォルトのBOOLEAN値は、TRUEおよびFALSEからYESおよびNOに変更できます:

SET NULL BLANK
COLUMN COL1 BOOLEAN YES NO
SELECT * FROM my_table; 

次のような出力結果が表示されます。


ID COL1 COL2 
1 YES   BLANK
2 NO    TRUE
3 YES   TRUE
4 NO    TRUE
5 NO    TRUE
6 NO    TRUE
7 YES   FALSE
8 YES   BLANK