Sqlplus Column コマンド

Sqlplus 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]

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

  • 列ヘッダーのテキスト
  • 列ヘッダーの位置
  • NUMBERデータの書式
  • 列データの折返し

さらに、1つまたはすべての列の現行の表示属性を表示します。

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

項 {column | expr}

COLUMUNコマンドで、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にすると、それぞれのエンティティである「&lt;」、「&gt;」、「&quot;」および「&amp;」に置き換えられ、WebブラウザでHTMLが正しく解釈されません。

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

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

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

FOLD_A[FTER]

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

FOLD_B[EFORE]

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

FOR[MAT] format

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

  • CHAR列

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

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

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

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

  • 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データベースでは、TO_CHARのようなSQL関数を使用するときに、非常に幅の広い列が自動的に使用できるようになります。デフォルトの列幅は、SQL*Plusおよびデータベースで使用されているキャラクタ・セットによって異なります。複数のキャラクタ・セットを使用している場合にスクリプトの移植性を最大限にするには、Oracleデータベースで、選択した列ごとに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の後に、表12-1「数値書式」に示す要素の1つを指定します。
表12-1

要素 説明
,(カンマ) 9,999 指定した位置にカンマが表示されます。
. (ピリオド) 99.99 数値の整数部と小数部を区切るピリオド(小数点)が表示されます。
$ $9999 先行ドル記号が表示されます。
0 0999 9990 先行0(ゼロ)が表示されます。 後続0(ゼロ)が表示されます。
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モードおよびiSQL*Plusでは動作しません。

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列またはマルチバイトCLOB列をWORD_WRAPPEDオプションで書式設定することはできません。NCLOB列またはマルチバイト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_DATE
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 206;
 
                                   Job Report                         04/19/01
 
Job:     SA_MAN
 
HIRE_DATE
----------
1994-06-07

ALTER SESSIONコマンドの詳細は、『Oracle Database SQLリファレンス』を参照してください。

Reference http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19277-01/ch12.html#25409