ヘッダーをスキップ
Oracle OLAP DMLリファレンス
11g リリース1(11.1)
E05732-02
  目次へ
目次
索引へ
索引

戻る
戻る
 
次へ
次へ
 

OLAP DMLのデータ型

他の言語と同様、OLAP DMLのデータ型は、値や値に対して1つ以上の演算を定義したものの種類です。

Oracle OLAP DMLでは、表2-1「OLAP DMLのデータ型の一覧」に示すデータ型をサポートしています。

表2-1 OLAP DMLのデータ型の一覧

データ型 略称 説明

BOOLEAN

BOOL

TRUEおよびFALSEの論理値を表す。

DATE

なし

同じ名前のSQLのデータ型には対応しない。OLAP DML固有の古いデータ型。

A.D.1000年1月1日からA.D.9999年12月31日までの範囲の日、月および年のデータ(時と分のデータは含まない)。

DATETIME

なし

SQLのDATEデータ型に対応する。

B.C.4712年1月1日からA.D.9999年12月31日までが有効な日付の範囲。デフォルトの書式は、NLS_DATE_FORMATパラメータを使用すると明示的に、NLS_TERRITORYパラメータを使用すると暗黙的に決定される。サイズは7バイトに固定される。このデータ型には、日時フィールドYEARMONTHDAYHOURMINUTEおよびSECONDが含まれる。小数秒やタイムゾーンは含まれない。

TIMESTAMP

なし

SQLのTIMESTAMPデータ型に対応する。

日付値(年、月および日)と時刻値(時、分および秒)。SECOND日時フィールドの小数部で最大精度9まで指定できる。デフォルトの書式は、NLS_DATE_FORMATパラメータを使用すると明示的に、NLS_TERRITORYパラメータを使用すると暗黙的に決定される。サイズは11バイト。このデータ型には、日時フィールドYEARMONTHDAYHOURMINUTEおよびSECONDが含まれる。小数秒は含まれるが、タイムゾーンは含まれない。

TIMESTAMP_TZ

なし

SQLのTIMESTAMP WITH TIME ZONEデータ型に対応する。

TIMESTAMPのすべての値と、タイムゾーンの時差値。SECOND日時フィールドの小数部で最大精度9まで指定できる。デフォルトの書式は、NLS_DATE_FORMATパラメータを使用すると明示的に、NLS_TERRITORYパラメータを使用すると暗黙的に決定される。サイズは13バイトに固定される。このデータ型には、日時フィールドYEARMONTHDAYHOURMINUTESECONDTIMEZONE_HOURおよびTIMEZONE_MINUTEが含まれる。小数秒と明示的なタイムゾーンを含む。

TIMESTAMP_LTZ


SQLのTIMESTAMP WITH LOCAL TIME ZONEデータ型に対応する。

TIMESTAMP_TZのすべての値。ただし、次の例外を含む。

  • データはデータベースへの格納時、データベースのタイムゾーンに正規化される。

  • データは取得時、セッションのタイムゾーンで表示される。

デフォルトの書式は、NLS_DATE_FORMATパラメータを使用すると明示的に、NLS_TERRITORYパラメータを使用すると暗黙的に決定される。サイズは11バイト。

DSINTERVAL

なし

SQLのINTERVAL DAY TO SECONDデータ型に対応する。

日、時、分および秒で期間を格納する。

YMINTERVAL

なし

SQLのINTERVAL YEAR TO MONTHデータ型に対応する。

年と月で期間を格納する。

INTEGER

INT

(-2**31)〜(2**31)-1の整数。

SHORTINTEGER

SHORTINT

(-2**15)〜(2**15)-1の整数。

LONGINTEGER

LONGINT

(-2**63)〜(2**63)-1の整数。

DECIMAL

DEC

-(10**308)〜+(10**308)の小数(最大有効桁数15桁)。

SHORTDECIMAL

SHORT

-(10**38)〜+(10**38)の小数(最大有効桁数7桁)。

NUMBER [(p,[s])]

なし

-(10**125)〜+(10**125)の小数(最大有効桁数38桁)。

TEXT

なし

データベース・キャラクタ・セットで1行に最大4000バイト。このデータ型は、データベースのCHARデータ型およびVARCHAR2データ型と等価。ただし、このデータ型の変数を定義する際は、変数値に対する最大文字数を2**32から2**64に増加させるため、DEFINE VARIABLE文にRANSPACE64キーワードを指定する。

NTEXT

なし

UTF-8文字コードで1行に最大4000バイト。このデータ型は、データベースのNCHARデータ型およびNVARCHAR2データ型と等価。ただし、このデータ型の変数を定義する際は、変数値に対する最大文字数を2**32から2**64に増加させるため、DEFINE VARIABLE文にRANSPACE64キーワードを指定する。

ID

なし

データベース・キャラクタ・セットで1行にシングルバイト文字で最大8文字。IDは、単純なディメンションの値にのみ有効。DEFINE DIMENSION(単純)を参照。

RAW (size)

なし

長さがsizeバイトのRAWバイナリ・データ。最大サイズは2000バイト。RAW値に対してサイズの指定が必須。ただし、このデータ型の変数を定義する際は、変数値に対する最大文字数を2**32から2**64に増加させるため、DEFINE VARIABLE文にRANSPACE64キーワードを指定する。

ROWID

なし

表の行のアドレスを一意に表すBASE64文字列。主に、ROWID疑似列によって返される値のためのデータ型。

UROWID

なし

索引編成表の行の論理アドレスを表すBASE64文字列。オプションのsizeは、UROWID型の列のサイズ。最大サイズおよびデフォルトは4000バイト。

WORKSHEET


値を特定のデータ型に変換せずに引数を処理する場合に、OLAP DMLプログラムの引数および一時変数に指定する。WKSDATAファンクションを使用して、WORKSHEETデータ型で引数のデータ型を取得する。


データ型のカテゴリ

通常、データ型が属するカテゴリとデータ型は、次のとおりです。

各OLAP DMLデータ・オブジェクトで使用できるデータ型の種類

オブジェクトの種類により、その値で使用されるデータ型が異なります。

数値データ型

表2-2「OLAP DMLの数値データ型」に示す数値データ型がサポートされています。

表2-2 OLAP DMLの数値データ型

データ型 データ値

INTEGER

(-2**31)〜(2**31)-1の整数。

SHORTINTEGER

(-2**15)〜(2**15)-1の整数。

LONGINTEGER

(-2**63)〜(2**63)-1の整数。

DECIMAL

-(10**308)〜+(10**308)の小数(最大有効桁数15桁)。

SHORTDECIMAL

-(10**38)〜+(10**38)の小数(最大有効桁数7桁)。

NUMBER

-(10**125)〜+(10**125)の小数(最大有効桁数38桁)。


データを入力する場合、どのデータ型の値でも、プラス記号(+)またはマイナス記号(-)で始めることができますが、カンマを含めることはできません。ただし、他の数式に続く負の数の前にはカンマが必要です。カンマがない場合、マイナス記号は減算演算子として解釈されます。また、小数値には小数点を使用できます。データを表示する際、桁区切りおよび小数点は、NLS_NUMERIC_CHARACTERSオプションによって制御します。

LONGINTEGER値の使用

ほとんどの数値データ型は、値が範囲外の場合、NAを返します。ただし、LONGINTEGERデータ型にはオーバーフロー保護機能がないため、計算結果が範囲外の数値になるような場合、不適切な値が返されます。このことが問題になる場合は、LONGINTEGERのかわりにNUMBERデータ型を使用してください。

NUMBER値の使用

NUMBER変数を定義する場合、その精度(p)およびスケール(s)を指定し、適切な桁数を設定できます。精度は、有効桁数です。スケールには正または負を指定できます。正のスケールは小数点の右側の桁数を識別します。また負のスケールは小数点の左側の桁数を識別し、この部分は端数処理される場合があります。

NUMBERデータ型は、Oracle Databaseの標準ライブラリによってサポートされ、SQLでの動作と同様に動作します。テキスト・データ型またはINTEGERデータ型が適切でない場合に、ディメンションおよびサロゲートに使用されます。通常、計算(予測および集計など)に使用されない変数に代入され、データベースの丸め処理に一致する必要がある変数、または高い精度が要求される変数に使用されます。変数にNUMBERデータ型を割り当てるかどうかを判断する場合、パフォーマンスを最適化するために次の点に注意してください。

  • NUMBER値はハードウェア(速度優先)ではなくソフトウェア(精度優先)で計算されるため、アナリティック・ワークスペースにおけるNUMBER変数の計算は、他の数値データ型より遅くなります。

  • アナリティック・ワークスペースからNUMBERデータ型が含まれるリレーショナル列にデータがフェッチされる場合、アナリティック・ワークスペースでデータにすでにNUMBERデータ型が含まれている場合には、変換手順が不要なため、パフォーマンスが最適化されます。

テキスト・データ型

Oracle OLAPでは、表2-3「OLAP DMLのテキスト・データ型」に示すテキスト・データ型がサポートされています。

表2-3 OLAP DMLのテキスト・データ型

データ型 データ値

TEXT

データベース・キャラクタ・セットで1行に最大4000バイト。このデータ型は、データベースのCHARデータ型およびVARCHAR2データ型と等価。

NTEXT

UTF-8文字コードで1行に最大4000バイト。このデータ型は、データベースのNCHARデータ型およびNVARCHAR2データ型と等価。

ID

データベース・キャラクタ・セットで1行にシングルバイト文字で最大8文字。IDは、単純なディメンションの値にのみ有効。DEFINE DIMENSION(単純)を参照。


テキスト・リテラル

テキスト・リテラルは、一重引用符で囲む必要があります。Oracle OLAPは、引用符で囲まれていない英数字をオブジェクト名として認識し、二重引用符はコメントの開始として認識します。

引用符付き文字列内に引用符付き文字列を埋め込むことができます。これは、コンポジットまたは結合ディメンションのベース・ディメンション値を指定する場合、または値にアポストロフィが含まれている場合に必要となる処理です。Oracle OLAPでは、テキスト文字列であることを示すために一重引用符が使用されます。そのため一重引用符は、テキスト文字列の中で使用される場合は特殊記号とみなされます。したがって、テキスト文字列内で一重引用符のリテラル値を指定する場合は、引用符の前にバックスラッシュを付けます。

たとえば、New YorkおよびApple Saucemarkprod結合ディメンションのベース・ディメンション値の有効な組合せであるかどうかを確認するとします。次の文によって、YESまたはNOの結果が返されます。

SHOW ISVALUE(markprod, '<\'New York\' \'Apple Sauce\'>')

埋込みの引用符付き文字列にさらに次のレベルの埋込みがある場合、次の文に示すように、「Joe's Deli」のアポストロフィや、その前に置く必要があるバックスラッシュなどの特殊文字の前にはそれぞれ、バックスラッシュを使用する必要があります。

SHOW ISVALUE(markprod, '<\'Joe\\\'s Deli\' \'Apple Sauce\'>')

エスケープ・シーケンス

表2-4「認識されるエスケープ・シーケンス」は、Oracle OLAPによって認識されるエスケープ・シーケンスを示しています。

表2-4 認識されるエスケープ・シーケンス

シーケンス 意味

\b

バックスペース。

\f

改ページ。

\n

ライン・フィード(改行)。

\r

キャリッジ・リターン(改行)。

\t

水平タブ。

\"

二重引用符。

\'

一重引用符。

\\


バックスラッシュ。

\dnnn

ASCIIコードnnn(10進)の文字。\dは10進のエスケープを示し、nnnは文字の10進値。

\xnn

ASCIIコードnn(16進)の文字。\xは16進のエスケープを示し、nnは文字の16進値。

\Unnnn

Unicode nnnnの文字。\UはUnicodeのエスケープを示し、nnnnは値U+nnnnでUnicodeのコード・ポイントを表す4桁の16進のINTEGER値。Uは、大文字にする必要がある。


日付のみのデータ型

Oracle OLAP DMLのDATEデータ型は、同じ名前のSQLのデータ型に対応しません。OLAP DML固有の古いデータ型です。OLAP DMLのDATEデータ型は、変数と、DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションに対して有効なデータ型です(DEFINE DIMENSION(DWMQY)コマンドの項を参照)。A.D.1000年1月1日からA.D.9999年12月31日までの範囲の日、月および年のデータ(時と分のデータは含まない)を格納するのに使用されます。OLAP DMLのDATEデータ型は時と分のデータは含まないため、通常、日付のみのデータ型と呼ばれます。


ヒント:

SQLのDATEデータ型に対応するOracle OLAP DMLのデータ型は、DATETIMEという名前です。詳細は、DATETIMEデータ型を参照してください。

日付のみの入力値

DATE型の有効な入力リテラル値は、数値、パック数値または月名という3つのスタイルのいずれか1つに従う必要があります。これらのスタイルは、セッション全体で混在していても構いません。


ヒント:

テキスト式(TEXTデータ型またはIDデータ型を持つ式など)が有効な日付のみの値であるかどうかを確認するには、ISDATEプログラムを使用します。

数値スタイル

次のルールに基づき、日、月、年を3つのINTEGER値と1つ以上のセパレータを使用して指定します。

  • 日および月の構成要素には、1桁または2桁を使用できます。

  • すべての年について、年の構成要素として4桁を使用できます(1997など)。1950〜2049年の範囲内の年については、年の構成要素として2桁も使用できます(50は1950を表す、など)。

  • 各要素間のセパレータには、空白、ダッシュ(-)、スラッシュ(/)、コロン(:)またはカンマ(,)を使用できます。

例: '24/4/97'または'24-04-1997'

パック数値スタイル

次のルールに基づき、日、月、年を3つのINTEGER値を使用して指定します。ここではセパレータは使用しません。

  • 日および月の構成要素は、2桁である必要があります。日または月が10より小さい場合は、前にゼロを付けます。

  • すべての年について、年の構成要素として4桁を使用できます(1997など)。1950〜2049年の範囲内の年については、年の構成要素として2桁も使用できます(50は1950を表す、など)。

  • 日付の構成要素間にセパレータは使用できません。

例: '240497'または'04241997'

月名スタイル

次のルールに基づき、日および年をINTEGER値で、月をテキストで指定します。

  • 月の構成要素は、MONTHNAMESオプションでリストされている名前のいずれかに一致する必要があります。月の名前は1文字またはそれ以上の数の文字に略すことができます。その場合、その文字が、MONTHNAMES内の名前の先頭に一意で一致するのに十分な文字数である必要があります。月の構成要素の大文字/小文字は、MONTHNAMESの大文字/小文字と一致している必要はありません。

  • 日の構成要素には、1桁または2桁を使用できます。

  • すべての年について、年の構成要素として4桁を使用できます(1997など)。1950〜2049年の範囲内の年については、年の構成要素として2桁も使用できます(50は1950を表す、など)。

  • 日と年の構成要素が隣接しているときは、それらの構成要素間に少なくとも1つのセパレータが必要です。セパレータには、空白、ダッシュ(-)、スラッシュ(/)、コロン(:)またはカンマ(,)を使用できます。必要に応じて、日と月の間、または年と月の間に1つ以上のセパレータを配置できます。

例: '24APR97''24 ap 97'または'April 24, 1997'

日付のみのディメンション値

DAY型、WEEK型、MONTH型、QUARTER型またはYEAR型のディメンションについて、日付のみの値の書式は、オブジェクトに関連付けられたVNF(値名書式)によって決定されます。VNFは、日付のみの値の入力書式および表示書式を制御するテンプレートです。テンプレートには、期間を特定する構成要素(日、月、暦年、会計年度および会計年度内の期間)の書式を指定できます。VNFをオブジェクトと関連付けるには、VNF文をその定義に追加します。VNFをオブジェクトのディメンションに追加しない場合、オブジェクトではデフォルトのVNFが使用されます(表2-5「DWMQYディメンションに対するデフォルトのVNF」を参照)。

表2-5 DWMQYディメンションに対するデフォルトのVNF

ディメンションの型 デフォルトのVNF

DAY

<DD><MTXT><YY>

01JAN95

WEEK

W<P>.<FF>

W1.95

複数のWEEK

<NAME><P>.<FF>

MYWEEK1.95

MONTH

<MTXT><YY>

JAN95

複数のMONTH

<NAME><P>.<FF>

MYMONTH1.95

QUARTER

Q<P>.<FF>

Q1.95

YEAR

YR<YY> 

YR95


日付のみの値では、入力書式と出力書式を個別に指定できます。あるスタイルで日付のみの値を入力し、別のスタイルでそれらの値をレポートできます。

日付のみの変数表示スタイル

出力で日付のみの変数値を表示する場合、書式はDATEFORMATオプションに基づきます。デフォルトの書式は、2桁の日付、3文字の月、および2桁の年です(たとえば、03MAR97)。月名のテキストは、MONTHNAMESオプションに基づきます。月、日および年の構成要素の順序を変更するには、DATEORDERオプションを参照してください。

日時データ型と期間データ型

OLAP DMLには、SQLの日時データ型と期間データ型に対応するデータ型があります。表2-6「OLAP DMLの日時データ型および期間データ型と、対応するSQLのデータ型」に示されているように、データ型の名前はOLAP DMLとSQLでは異なります。

表2-6 OLAP DMLの日時データ型および期間データ型と、対応するSQLのデータ型

OLAP DMLのデータ型 対応するSQLのデータ型

DATETIME

DATE

TIMESTAMP

TIMESTAMP

TIMESTAMP_TZ

TIMESTAMP WITH TIMEZONE

TIMESTAMP_LTZ

TIMESTAMP WITH LOCAL TIME ZONE

DSINTERVAL

INTERVAL DAY TO SECOND

YMINTERVAL

INTERVAL YEAR TO MONTH


OLAP DMLの日時データ型は、DATETIMETIMESTAMPTIMESTAMP_TZおよびTIMESTAMP_LTZです。期間データ型は、YMINTERVALおよびDSINTERVALです。日時と期間は両方ともフィールドで構成されています(「日時フィールドと期間フィールド」を参照)。


注意:

Oracle OLAP DMLにはDATEという名前のデータ型がありますが、これは同じ名前のSQLのデータ型に対応しません。OLAP DMLのDATEデータ型は、SQLの日時データ型と期間データ型がOLAP DMLに実装される前に実装されました。OLAP DMLのDATEデータ型は日付値のみ(時刻値は含まない)を格納するため、日付のみのデータ型と呼ばれることがあります。

日時フィールドと期間フィールド

日時と期間は両方ともフィールドで構成されています。これらのフィールドの値によってデータ型の値が決まります。表2-7「日時フィールドと値」に、日時フィールドと、日時および期間で使用できる値を示します。


ヒント:

日時データの操作で予期しない結果にならないように、DBTIMEZONEとSESSIONTIMEZONEを使用してデータベースとセッションのタイムゾーンを確認できます。タイムゾーンを手動で設定しなかった場合、Oracle Databaseではデフォルトでオペレーティング・システムのタイムゾーンが使用されます。オペレーティング・システムのタイムゾーンが有効なOracleのタイムゾーンでない場合、Oracleではデフォルト値としてUTCが使用されます。

表2-7 日時フィールドと値

日時フィールド 日時データ型の有効な値 期間データ型の有効な値

YEAR

-4712〜9999(0年を除く)

任意の正および負の整数

MONTH

01〜12

0〜11

DAY

01〜31(現行のNLS暦年のパラメータのルールに基づき、MONTHおよびYEARの値で制限される)

任意の正および負の整数

HOUR

00〜23

0〜23

MINUTE

00〜59

0〜59

SECOND

00〜59.9(n)。ただし、9(n)は時刻の小数秒の精度。9(n)部分はDATETIMEでは適用されない。

0〜59.9(n)。ただし、9(n)は期間の小数秒の精度。

TIMEZONE_HOUR

-12〜14(この範囲は夏時間への変更に対応)。DATETIMETIMESTAMPには適用されない。

適用なし

TIMEZONE_MINUTE

(表の終わりの注意を参照)

00〜59。DATETIMETIMESTAMPには適用されない。

適用なし

TIMEZONE_REGION

V$TIMEZONE_NAMESデータ・ディクショナリ・ビューのTZNAME列を問い合せる。DATETIMETIMESTAMPには適用されない。すべてのタイムゾーン地域の完全なリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照。

適用なし

TIMEZONE_ABBR

V$TIMEZONE_NAMESデータ・ディクショナリ・ビューのTZABBREV列を問い合せる。DATETIMETIMESTAMPには適用されない。

適用なし


注意: TIMEZONE_HOURTIMEZONE_MINUTEの両方を指定すると、書式+|- hh:mmのエンティティ(値は-12:59〜+14:00の範囲)として解釈されます。

日時書式テンプレート

日時書式テンプレートは、文字列に格納する日時データの書式を示すテンプレートです。書式モデルでは、データベースの値の内部表現は変更できません。文字列を日付に変換する場合、書式モデルによってOracle Databaseによる文字列の解釈方法が決定されます。OLAP DML文では、書式モデルをTO_CHARおよびTO_DATEファンクションの引数として使用して次を指定できます。

  • Oracleでデータベースから値を返すのに使用する書式

  • Oracleでデータベースに格納するのに指定した値の書式

日時書式テンプレートは、次のファンクションで使用できます。

  • TO_*日時ファンクション。このファンクションは、デフォルトの書式以外の書式の文字値を日時値に変換する場合に使用します。TO_*日時ファンクションは、TO_CHARTO_DATETO_TIMESTAMPTO_TIMESTAMP_TZTO_YMINTERVALおよびTO_DSINTERVALです。

  • TO_CHARファンクション。このファンクションは、デフォルトの書式以外の書式の日時値を文字列に変換する場合(アプリケーションから日付を出力する場合など)に使用します。

デフォルトの日時書式は、NLS_DATE_FORMAT初期化パラメータを使用すると明示的に、NLS_TERRITORY初期化パラメータを使用すると暗黙的に指定されます。セッションのデフォルトの日時書式は、ALTER SESSION文で変更できます。このデフォルトを変更して、特定のOLAP DMLオブジェクトで使用する日時書式を指定するには、DATE_FORMATコマンドを使用して、オブジェクトの定義に日時書式を追加します。

文字列から日付への変換ルール

次の書式設定のルールは、文字列値を日時値に変換する場合に適用されます(ただし、書式モデルで修飾子FXまたはFXFMを使用して完全一致の書式検査を制御した場合は適用されません)。

  • 先行ゼロを含む数値書式要素の桁がすべて指定されている場合は、日付文字列の書式文字列に含まれる句読点を省略できます。たとえば、MM、DD、YYなどの2桁の書式要素で、2ではなく02を指定する場合です。

  • 日付文字列の書式文字列で最後にある時刻フィールドを省略できます。

  • 日時書式要素と日付文字列内の対応する文字の一致に失敗した場合、かわりの書式要素が適用されます(表2-8「Oracleの書式一致」を参照)。

表2-8 Oracleの書式一致

元の書式要素 元の書式要素のかわりに使用される書式要素
'MM'

'MON'および'MONTH'

'MON

'MONTH'

'MONTH'

'MON'

'YY'

'YYYY'

'RR'

'RRRR'


DATETIMEデータ型

OLAP DMLのDATETIMEデータ型は、SQLのDATEデータ型に対応します。DATETIME値の書式および言語は、NLS_DATE_FORMATオプションおよびNLS_DATE_LANGUAGEオプションの設定によって制御されます。DATETIMEデータ型は、Oracle Databaseの標準ライブラリによってサポートされ、OLAP DMLではSQLのDATEデータ型の動作と同様に動作します。


注意:

Oracle OLAP DMLにはDATEという名前のデータ型がありますが、これは同じ名前のSQLのデータ型に対応しません。OLAP DMLのDATEデータ型は日付値のみ(時刻値は含まない)を格納するため、日付のみのデータ型と呼ばれることがあります。DATE値の書式設定を制御するDATEORDER、DATEFORMATおよびMONTHNAMESの各オプションは、DATETIME値には影響しません。ただし、DATETIME値およびDATE値は、ほとんどのDML文で区別なく使用できます。

DATETIME値は文字列リテラルとして指定できます。また、TO_DATEファンクションを使用すると、文字または数値を日付値に変換できます。

DATETIME値をリテラルとして指定するには、グレゴリオ暦を使用する必要があります。次の例のように、ANSIリテラルを指定できます。

DATETIME '1998-12-25'

ANSI日付リテラルには時刻部分がなく、'YYYY-MM-DD'書式で正確に指定する必要があります。

または、次の例に示すように、TO_DATEファンクションを使用してDATETIME値を指定することもできます。

TO_DATE('98-DEC-25 17:30','YY-MON-DD HH24:MI')

OracleのDATETIME値のデフォルトの日付書式テンプレートは、NLS_DATE_FORMAT初期化パラメータで指定されます。この例の日付書式には、日を表す2桁の数値、月名の略称、年の最後の2桁および24時間指定が含まれています。

デフォルトの日時書式の文字値が日時式に使用されている場合は、日時値に自動的に変換されます。

時刻要素を含めずに日時値を指定すると、デフォルトの時刻として午前0時(24時間制で00:00:00または12時間制で12:00:00)に設定されます。日付を含めずに日時値を指定すると、デフォルトの日付として現在の月の第1日に設定されます。

DATETIMEの値には、常に日付と時刻の両方のフィールドが含まれます。したがって、式でDATETIME値を使用する場合、問合せで時刻フィールドを指定するか、DATETIME値の時刻フィールドが午前0時に設定されていることを確認する必要があります。そうしないと、予期しない結果が返されることがあります。TRUNC(日付)ファンクションを使用すると、時刻フィールドを午前0時に設定できます。また、問合せで等価条件または非等価条件のかわりに大小条件を使用できます。したがって、式に午前0時以外のDATETIME値が含まれる場合、正しい結果を得るには、問合せで時刻フィールドの値を排除する必要があります。

SYSDATE日付ファンクションは、現在のシステムの日付および時刻を返します。CURRENT_DATEファンクションは、現行のセッションの日付を返します。SYSDATETO_*日時ファンクション、およびデフォルトの日付書式の詳細は、「日時ファンクション」およびDATE_FORMATコマンドを参照してください。

TIMESTAMPデータ型

TIMESTAMPデータ型は、DATETIMEデータ型の拡張です。このデータ型には、DATETIMEデータ型の年、月および日と、時、分および秒の値が格納されます。このデータ型は、正確な時刻値を格納する場合に有効です。

SHOW SYSDATE
26-JUL-06

DEFINE mytimestamp VARIABLE TIMESTAMP
mytimestamp = SYSDATE
COLWIDTH = 30
REPORT mytimestamp
MYTIMESTAMP
------------------------------
         26-JUL-06 10.44.42 AM

TIMESTAMPデータ型には、年、月、日、時、分、秒および小数秒の値が格納されます。TIMESTAMPをリテラルとして指定する場合、小数秒の精度値は次のように最大9桁の数になります。

TIMESTAMP '1997-01-31 09:26:50.124'

TIMESTAMP_TZデータ型

TIMESTAMP_TZは、SQLのTIMESTAMP WITH TIME ZONEデータ型に対応します。値にタイムゾーン・オフセットを含むTIMESTAMPのバリアントです。タイムゾーン・オフセットは、ローカル時間とUTC(協定世界時、以前のグリニッジ標準時)との時差(時間および分単位)です。このデータ型は、地域をまたいで日付情報を収集および評価する場合に有効です。

Oracleのタイムゾーン・データは、ftp://elsie.nci.nih.gov/pub/から入手できるパブリック・ドメイン情報に基づいています。ただし、このサイトから入手できる最新情報を反映しているとは限りません。

TIMESTAMP_TZデータ型は、タイムゾーン・オフセットを含むTIMESTAMPのバリアントです。TIMESTAMP_TZをリテラルとして指定する場合、小数秒の精度値は次のように最大9桁の数になります。

TIMESTAMP '1997-01-31 09:26:56.66 +02:00'

2つのTIMESTAMP_TZ値がUTCで同じ時刻を表している場合は、データに格納されているTIME ZONEのオフセットに関係なく同一とみなされます。たとえば、

TIMESTAMP '1999-04-15 8:00:00 -8:00'

は、次の式と同じです。

TIMESTAMP '1999-04-15 11:00:00 -5:00'

つまり、太平洋標準時の午前8:00は、東部標準時の午前11:00と同じです。

UTCオフセットはTZR(タイムゾーン・リージョン)書式要素で置き換えることができます。たとえば、次の例は上述の例と同じ値を示しています。

TIMESTAMP '1999-04-15 8:00:00 US/Pacific'

夏時間への切替時の境界を明確にするには、TZR書式要素および対応するTZD書式要素の両方を使用します。次のように指定すると、上述の例で確実に夏時間の値が返されます。

TIMESTAMP '1999-10-29 01:30:00 US/Pacific PDT'

日時式を使用してタイムゾーン・オフセットを表現することもできます。

ERROR_ON_OVERLAP_TIMEセッション・パラメータをTRUEに設定していて、TZD書式要素を追加しない場合、日時値が不明確であると、エラーが返されます。ERROR_ON_OVERLAP_TIMEをFALSEに設定している場合、不明確な日時は、指定されている地域の標準時間として解釈されます。

TIMESTAMP_LTZデータ型

TIMESTAMP_LTZは、SQLのTIMESTAMP WITH LOCAL TIME ZONEデータ型に対応します。値にタイムゾーン・オフセットを含むTIMESTAMPのもう1つのバリアントです。TIMESTAMP_TZとは異なり、データベースに格納されるデータはデータベースのタイムゾーンに対して正規化され、タイムゾーン・オフセットは列データの一部として格納されません。ユーザーがデータを検索すると、そのユーザーのローカル・セッションのタイムゾーンで返されます。タイムゾーン・オフセットは、ローカル時間とUTC(協定世界時、以前のグリニッジ標準時)との時差(時間および分単位)です。このデータ型は、2層アプリケーションのクライアント・システムにおけるタイムゾーンの日付情報を表示する場合に有効です。

Oracleのタイムゾーン・データは、ftp://elsie.nci.nih.gov/pub/から入手できるパブリック・ドメイン情報に基づいています。ただし、このサイトから入手できる最新情報を反映しているとは限りません。

TIMESTAMP_LTZデータ型は、TIMESTAMP_TZとは異なり、データベースに格納されるデータはデータベースのタイムゾーンに対して正規化されます。タイムゾーン・オフセットは列データの一部として格納されません。TIMESTAMP_LTZ用のリテラルはありません。このデータ型の値は、その他の有効な日時リテラルを使用して表します。次の表に、TIMESTAMP_LTZ値をオブジェクトに追加する場合に使用できる書式と、SHOWコマンドなどのOLAP DML文で返される各値の対応を示します。

値の追加時に指定する値 戻り値
'19-FEB-2004' 19-FEB-2004.00.00.000000 AM
SYSTIMESTAMP 19-FEB-04 02.54.36.497659 PM
TO_TIMESTAMP('19-FEB-2004', 'DD-MON-YYYY')); 19-FEB-04 12.00.00.000000 AM
SYSDATE 19-FEB-04 02.55.29.000000 PM
TO_DATE('19-FEB-2004', 'DD-MON-YYYY')); 19-FEB-04 12.00.00.000000 AM
TIMESTAMP'2004-02-19 8:00:00 US/Pacific'); 19-FEB-04 08.00.00.000000 AM

指定する値に時刻要素を明示的または暗黙的に含めない場合、デフォルトで午前0時が返されます。

YMINTERVALデータ型

YMINTERVALは、SQLのINTERVAL YEAR TO MONTHデータ型に対応します。YMINTERVALでは、YEARおよびMONTH日時フィールドを使用して期間が格納されます。このデータ型は、年と月の値のみが重要なときに2つの日時値の差を表す場合に有効です。

YMINTERVAL期間リテラルは、次の構文を使用して指定します。

INTERVAL 'integer [- integer ]' YEAR|MONTH [(precision) ] [TO YEAR | MONTH ]

ただし、

  • 'integer [-integer]'には、先行および後続のフィールドにリテラルの整数値を指定します。先行のフィールドがYEARで後続のフィールドがMONTHの場合、月フィールドの整数値の範囲は0〜11になります。

  • precisionは、先行フィールドの最大桁数です。先行フィールドの精度の有効範囲は0〜9で、デフォルト値は2です。

後続のフィールドを指定する場合、先行のフィールドよりも下位の単位を指定する必要があります。たとえば、INTERVAL '0-1' MONTH TO YEARは無効です。

次のYMINTERVALリテラルは、123年2か月の期間を示します。

INTERVAL '123-2' YEAR(3) TO MONTH

リテラルの他の書式の例を次に示します。簡略バージョンも一部含みます。

期間リテラルの書式 解釈
INTERVAL '123-2' YEAR(3) TO MONTH 123年2か月の期間。先行のフィールドの精度がデフォルトの2桁を超える場合、精度を指定する必要がある。
INTERVAL '123' YEAR(3) 123年0か月の期間。
INTERVAL '300' MONTH(3) 300か月の期間。
INTERVAL '4' YEAR INTERVAL '4-0' YEAR TO MONTHにマップされ、4年を示す。
INTERVAL '50' MONTH INTERVAL '4-2' YEAR TO MONTHにマップされ、50か月または4年2か月を示す。
INTERVAL '123' YEAR エラーを返す。デフォルトの精度が2で、'123'は3桁であるため。

INTERVAL YEAR TO MONTHリテラル同士を加算または減算して、別のINTERVAL YEAR TO MONTHリテラルを生成できます。例を次に示します。

INTERVAL '5-3' YEAR TO MONTH + INTERVAL'20' MONTH =
INTERVAL '6-11' YEAR TO MONTH

DSINTERVALデータ型

DSINTERVALは、SQLのINTERVAL DAY TO SECONDデータ型に対応します。日、時、分および秒で期間が格納されます。このデータ型は、2つの日時値の正確な差を表す場合に有効です。

DSINTERVAL期間リテラルは、次の構文を使用して指定します。

INTERVAL 'integer|integer time_expr|time_expr

DAY|HOUR|MINUTE [(leading_precision)] | SECOND [leading_precision[, fractional_seconds_precision ])]

[ TO DAY|HOUR|MINUTE|SECOND [(fractional_seconds_precision) ]]

ただし、

  • integerには日数を指定します。この値は、先行の精度で指定される数より桁数が大きいと、エラーが返されます。

  • time_exprには、書式HH[:MI[:SS[.n]]]MI[:SS[.n]]またはSS[.n]で時間を指定します。ここで、nには秒の小数部を指定します。nfractional_seconds_precisionで指定される数より大きい桁数の場合、nfractional_seconds_precision値で指定される桁数に丸められます。先行のフィールドがDAYの場合のみ、整数と空白に続けてtime_exprを指定できます。

  • leading_precisionは、先行のフィールドの桁数です。許容値は0〜9で、デフォルトは2です。

  • fractional_seconds_precisionは、SECOND日時フィールドの小数部の桁数です。許容値は1〜9で、デフォルトは6です。

後続のフィールドを指定する場合、先行のフィールドよりも下位の単位を指定する必要があります。たとえば、INTERVAL MINUTE TO DAYは無効です。この制限のため、SECONDが先行のフィールドの場合、期間リテラルは後続のフィールドを指定できません。

後続フィールドの値の有効範囲は、次のとおりです。

  • HOUR: 0〜23

  • MINUTE: 0〜59

  • SECOND: 0〜59.999999999

DSINTERVALリテラルの様々な書式の例を次に示します。簡略バージョンも一部含みます。

期間リテラルの書式 解釈
INTERVAL '4 5:12:10.222' DAY TO SECOND(3) 4日5時間12分10秒222ミリ秒。
INTERVAL '4 5:12' DAY TO MINUTE 4日5時間12分。
INTERVAL '400 5' DAY(3) TO HOUR 400日5時間。
INTERVAL '400' DAY(3) 400日。
INTERVAL '11:12:10.2222222' HOUR TO SECOND(7) 11時間12分10.2222222秒。
INTERVAL '11:20' HOUR TO MINUTE 11時間20分。
INTERVAL '10' HOUR 10時間。
INTERVAL '10:22' MINUTE TO SECOND 10分22秒。
INTERVAL '10' MINUTE 10分。
INTERVAL '4' DAY 4日。
INTERVAL '25' HOUR 25時間。
INTERVAL '40' MINUTE 40分。
INTERVAL '120' HOUR(3) 120時間。
INTERVAL '30.12345' SECOND(2,4) 30.1235秒。小数秒'12345'は精度が4であるため、'1235'に丸められる。

DAY TO SECOND期間リテラル同士を加算または減算できます。例を次に示します。

INTERVAL'20' DAY - INTERVAL'240' HOUR = INTERVAL'10-0' DAY TO SECOND

ブール・データ型

BOOLEANデータ型は、論理値を表します。コードでは、BOOLEAN値は「no」および「yes」を示す値(大文字および小文字の任意の組合せ)により表されます。Oracle OLAPの使用しているリリースで認識される実際の値は、NLS_LANGUAGEオプションによって指定される言語で決まります。読取り専用のNOSPELLおよびYESSPELLオプションを使用して、BOOLEAN値を表す値を取得できます。英語の言語コードでは、次の語を使用してBOOLEAN値を表すことができます。

  • YESTRUEON

  • NOFALSEOFF

BOOLEAN式の使用については、「ブール式」を参照してください。

RAWデータ型

RAWデータ型には、Oracle Databaseにより解釈されない(つまり、異なるシステム間でデータを移動する際に明示的に変換されない)データが格納されます。 RAWデータ型は、バイナリ・データまたはバイト文字列用として使用されます。

RAWデータを指定するための構文は次のとおりです。

RAW (size)

最大2000バイトまでのサイズを指定する必要があります。

RAWは可変長のデータ型ですが、Oracle Net(ユーザー・セッションをインスタンスに接続する)およびOracle Databaseユーティリティでは、RAWデータを転送する際に文字変換が実行されません。

Oracleでは、RAWデータとテキスト・データ間のデータ変換が自動的に実行されます。バイナリ・データは16進形式で表され、1つの16進文字がRAWデータの各4ビットを表しています。たとえば、1バイトのRAWデータのビットが11001011の場合、これはCBとして表示および入力されます。

行識別子データ型

行識別子データ型は、リレーショナル表の行のアドレスを格納するために使用されます。OLAP DMLでは、リレーショナル表のデータをアナリティック・ワークスペース内のオブジェクトにコピーするのに使用できる、次の2つの異なるデータ型がサポートされています。

ROWIDデータ型

ROWID疑似列を問い合せることで、リレーショナル表の行のアドレスを調べることができます。この疑似列の値は、各行のアドレスを表す文字列です。これらの文字列はROWIDデータ型を持ちます。


注意:

ROWIDデータ型の実際の列を含むリレーショナル表およびクラスタを作成できますが、Oracle Databaseでは、そのような列の値が有効なROWIDであることは保証されません。

ユーザー列に格納された拡張ROWIDデータ型には、制限付きROWIDのデータとデータ・オブジェクト番号が含まれます。データ・オブジェクト番号は、各データベース・セグメントに割り当てられた識別番号です。データ・オブジェクト番号は、データ・ディクショナリ・ビューUSER_OBJECTS、DBA_OBJECTSおよびALL_OBJECTSから取得できます。同じセグメントを共有するオブジェクト(同じクラスタ内のクラスタ化された表など)は、同じオブジェクト番号を持ちます。

拡張ROWIDは、文字A〜Z、a〜z、0〜9、プラス記号(+)およびスラッシュ(/)を含めることが可能なBASE64値として格納されます。拡張ROWIDは直接取得できません。拡張ROWIDの内容を解釈するには、提供されるDBMS_ROWIDパッケージを使用します。このパッケージ・ファンクションを使用すると、制限付きROWIDから直接取得できる可能性のある情報および拡張ROWID固有の情報が抽出および提供されます。


参照:

ROWIDデータ型と疑似列の詳細は、『Oracle Database SQL言語リファレンス』の該当する項目の説明を参照してください。

UROWIDデータ型

一部のリレーショナル表の列は、物理的でないアドレスや永続的でないアドレス、あるいはOracle Databaseによって生成されたものではないアドレスを持ちます。たとえば、索引編成表の行のアドレスは、移動可能な索引リーフに格納されます。外部表(ゲートウェイを介してアクセスされるDB2表など)のROWIDは、Oracle標準のROWIDではありません。

Oracleでは、索引編成表と外部表のアドレスはユニバーサルROWID(UROWID)を使用して格納されます。索引編成表は論理UROWIDを持ち、外部表は外部UROWIDを持ちます。どちらのタイプのUROWIDも、ヒープ編成表の物理ROWIDと同様にROWID疑似列に格納されます。

論理ROWIDは表の主キーに基づいて作成されます。主キーに変更がないかぎり、論理ROWIDは変更されません。索引編成表のROWID疑似列は、UROWIDデータ型です。この疑似列には、ヒープ編成表のROWID疑似列と同様に(SELECT ... ROWID文を使用して)アクセスできます。索引編成表のROWIDを格納する場合は、表に対してUROWID型の列を定義し、その列にROWID疑似列の値を取り出すことができます。


参照:

UROWIDデータ型の詳細は、『Oracle Database SQL言語リファレンス』のUROWIDデータ型の説明を参照してください。

データ型の変換

多くの場合、Oracle OLAPではデータ型の変換が自動的に実行されます(「テキスト・データ型の自動変換」および「数値データ型の自動変換」を参照)。また、OLAP DMLには値のデータ型変換に使用できるファンクションが数多くあります。

テキスト・データ型の自動変換

NTEXT値をOLAP DML文に引数として指定した場合、Oracle OLAPはそれらの値を自動的にTEXTに変換します。NTEXT値をデータベース・キャラクタ・セットで表すことができない場合、データの損失が発生します。

数値データ型の自動変換

Oracle OLAPは、1バイト固定幅のINTEGER変数と同様に、SHORTINTEGER変数を4バイト幅のINTEGERに自動的に変換して計算します。SHORTINTEGER変数の合計を計算すると、32,767より大きいか-32,768より小さい結果を取得および報告できます。1バイトのINTEGER変数の合計を計算すると、127より大きいか-128より小さい結果を取得および報告できます。しかし、それらの結果をそれぞれSHORTINTEGER変数または1バイトのINTEGER変数に代入しようとすると、変数はNAに設定されます。

Oracle OLAPでは、次のルールに従って数値データ型が自動的に変換されます。

  • SHORTINTEGERまたはSHORTDECIMALデータ型の値を式で使用する場合、値は使用される前に長い方に変換されます。比較式でSHORTDECIMALおよびDECIMALデータ型を混在させる場合に発生する可能性のある問題の詳細は、「ブール式」を参照してください。

  • 計算の結果をSHORTINTEGERデータ型の値として保存する場合、結果がSHORTINTEGERの範囲(-32768から32767まで)外である場合はNAが格納されます。

  • DECIMAL式の値をINTEGERデータ型のオブジェクトに代入する場合、格納または使用する前に値が丸められます。


    注意:

    DECIMAL値がINTEGER値の範囲を超える場合はNAが格納されます。

  • INTEGERデータ型の値が必要な場所で小数値を使用する場合、格納または使用する前に値が丸められます。


    注意:

    DECIMAL値がINTEGER値の範囲を超える場合はNAが格納されます。

  • 10進表現の値を、SHORTDECIMALデータ型の変数に代入すると、有効桁の最初の7桁のみが格納されます。

  • NUMBER値を他の数値データ型と組み合せると、すべての値がNUMBERに変換されます。

これらの変換とは異なる変換が必要な場合、CONVERT、TO_CHAR、TO_NCHAR、TO_NUMBERまたはTO_DATEファンクションを使用して別の結果を取得できます。