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]
また、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
指定した別名が列に割り当てられます。この別名は、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
のいずれか小さい方の値です。
データ型の幅を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 |
小数点文字の最小の数が表示されます。デフォルトは |
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
を指定すると、列の印刷が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
を指定すると、最初の表示行の終わりの文字列が切り捨てられます。
NCLOB
、BLOB
、BFILE
またはマルチバイトCLOB
の各列をWORD_WRAPPED
で書式設定することはできません。NCLOB
、BLOB
、BFILE
またはマルチバイトCLOB
の各列をCOLUMN WORD_WRAPPED
で書式設定した場合、列データはCOLUMN WRAPPED
が適用されたかのように動作します。
BOOLEAN列
リリース23c以降、BOOLEAN
データ型のCOLUMN
コマンドは、データベースから返される値の出力形式を、TRUE
またはFALSE
以外の別のテキスト・リテラルに設定します。
構文
COLUMN column BOOLEAN TEXT1 [TEXT2]
説明
TEXT1
は、データベースから返されるBOOLEAN
値TRUE
を表すテキストです。これは必須の値です。
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
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」が現行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