13.13 COLUMN
構文
COL[UMN] [{column | expr} [option ...]]
optionは、次のいずれかの句を表します。
ALI[AS] alias 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]
また、1つまたはすべての列の現行の表示属性も表示します。
指定した列または式についてのみ現行の表示属性を表示するには、columnまたはexprのみを指定してCOLUMNを入力します(その他の句は使用しません)。現行のすべての列表示属性を表示するには、句を指定せずに、COLUMNを入力します。
項
{column | expr}
COLUMNコマンドで、SQL SELECT文の中のどのデータ項目を参照するかを指示します(通常は列の名前)。COLUMNコマンドの中で式を使用する場合は、SELECT文の中での順序と同じ順序でexprを入力する必要があります。たとえば、SELECT文の中の式がa+bである場合、COLUMNコマンドの中でSELECT文の中の式を参照するときに、b+aまたは(a+b)はいずれも使用できません。
異なる表から同じ名前の列を選択してある場合は、その列名を指定したCOLUMNコマンドは両方の列に適用されます。LAST_NAME列を対象とするCOLUMNコマンドは、このセッションで参照するLAST_NAMEという名前のすべての列に適用されます。COLUMNは、SELECTコマンドの表名接頭辞を無視します。また、名前が二重引用符で囲まれている場合を除き、空白も無視されます。
列を別々に書式設定するには、SELECTコマンド自体の中で各列にそれぞれ一意の別名を割り当て(COLUMNコマンドのALIAS句は使用しないでください)、各列の別名を指定してCOLUMNコマンドを入力します。
ALI[AS] alias
指定した別名が列に割り当てられます。この別名は、BREAKおよびCOMPUTE、他のCOLUMNコマンドの中でその列を参照するために使用できます。
CLE[AR]
すべての列の属性をリセットするには、CLEAR COLUMNSコマンドを使用します。CLEAR COLUMNSでは、該当する列のATTRIBUTEも消去されます。
ENTMAP {ON | OFF}
HTML出力で選択された列に対して、エンティティのマッピングのONまたはOFFを指定します。この機能を使用すると、たとえば、同じレポートの別の列にエンティティをマッピングしていても、データの列にHTMLのハイパーリンクを含むことができます。HTMLのハイパーリンクを含む列に対してエンティティのマッピングをOFFにすると、HTMLのアンカー・タグのデリミタ、「<」、「>」、「"」および「&」が、レポートで正しく解釈されます。ONにすると、それぞれのエンティティである「<」、「>」、「"」および「&」に置き換えられ、WebブラウザでHTMLが正しく解釈されません。
列ヘッダーおよびCOMPUTEラベルのエンティティ、または列に表示される出力は、列のENTMAPの値によってマップされるかが決まります。
COLUMN ENTMAPのデフォルト設定は、MARKUP HTML ENTMAPオプションの現行の設定です。
MARKUP HTML ENTMAPオプションの詳細は、「SET MARKUPオプション」を参照してください。
FOLD_A[FTER]
列ヘッダーの後と列の各行の後に改行を挿入します。SQL*Plusは、SELECTリストの最後の列の後に余分な改行を挿入しません。FOLD_A[FTER]は、PREFORMATにONが設定されている場合を除き、SET MARKUP HTML ONモードでは動作しません。
FOLD_B[EFORE]
列ヘッダーの前と列の各行の前に改行を挿入します。SQL*Plusは、SELECTリストの最初の列の前に余分な改行を挿入しません。FOLD_A[FTER]は、PREFORMATにONが設定されている場合を除き、SET MARKUP HTML ONモードでは動作しません。
FOR[MAT] format
列の表示書式を指定します。指定する書式は、A10または$9,999などのテキスト定数である必要があります。
文字列
CHAR、NCHAR、VARCHAR2(VARCHAR)およびNVARCHAR2(NCHAR VARYING)列のデフォルトの幅は、データベース内の列の幅です。SQL*Plusは、これらのデータ型を左揃えで書式設定します。値が列幅に収まらない場合、SQL*Plusは、SET WRAPの設定に応じて、文字列を折り返すか切り捨てます。
LONG、BLOB、BFILE、CLOB、NCLOB、XMLTypeまたはJSON列のデフォルトの幅は、SET LONGCHUNKSIZEまたはSET LONGのいずれか小さい方の値です。
データ型の幅を、FORMAT Anを使用してnに変更します。(Aはアルファベットを表します。)列ヘッダーより短い幅を指定した場合は、SQL*Plusではヘッダーが切り捨てられます。
SQL*Plusは、2000バイトの後のXMLType列を切り捨てるか折り返します。これを回避するには、XMLType列にCOLUMNの書式を明示的に設定する必要があります。COLUMNの書式は、1行当たり最大60000にすることができます。
DATE列
SQL*Plusでは、書式が設定されていないDATE列のデフォルトの幅と書式は、NLS_DATE_FORMATパラメータから導出されます。NLS_DATE_FORMATの設定は、NLS_TERRITORYパラメータによって決定されます。たとえば、アメリカ合衆国の場合、NLS_TERRITORYのデフォルト書式は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書式要素が使用できるのは、最初または最後の桁のみです。
数値書式モデルにMI、Sまたは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]
列の値を表示する前に新しい行を開始します。NEWLINEは、FOLD_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を指定すると、列が印刷されます。
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]
長すぎて列に収まらないデータ型またはDATE列をSQL*Plusでどのように取り扱うかを指定します。WRAPPEDを指定すると、列の境界内で文字列が折り返され、必要に応じて新しい行が開始されます。WORD_WRAPが使用可能な場合、SQL*Plusは、組込みの改行文字を含むすべての先行空白(リターン、改行文字、タブ、空白など)をスキップして、各行を左揃えにします。行の境界上にない組込み空白はスキップされません。TRUNCATEDを指定すると、最初の表示行の終わりの文字列が切り捨てられます。
NCLOB、BLOB、BFILEまたはマルチバイトCLOBの各列をWORD_WRAPPEDオプションで書式設定することはできません。NCLOB、BLOB、BFILEまたはマルチバイトCLOBの各列をCOLUMN WORD_WRAPPEDで書式設定した場合、列データはCOLUMN WRAPPEDが適用されたかのように動作します。
使用方法
入力した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
WRAPをWORD_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」が現行サイズの行の中央に配置されています。
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を参照してください。