他の言語と同様、OLAP DMLのデータ型は、値や値に対して1つ以上の演算を定義したものの種類です。
Oracle OLAP DMLでは、表2-1「OLAP DMLのデータ型の一覧」に示すデータ型をサポートしています。
表2-1 OLAP DMLのデータ型の一覧
データ型 | 略称 | 説明 |
---|---|---|
|
BOOL |
|
|
なし |
同じ名前のSQLのデータ型には対応しない。OLAP DML固有の古いデータ型。 A.D.1000年1月1日からA.D.9999年12月31日までの範囲の日、月および年のデータ(時と分のデータは含まない)。 |
|
なし |
SQLの B.C.4712年1月1日からA.D.9999年12月31日までが有効な日付の範囲。デフォルトの書式は、 |
|
なし |
SQLの 日付値(年、月および日)と時刻値(時、分および秒)。 |
|
なし |
SQLの
|
|
SQLの
デフォルトの書式は、 |
|
|
なし |
SQLの 日、時、分および秒で期間を格納する。 |
|
なし |
SQLの 年と月で期間を格納する。 |
|
INT |
(-2**31)〜(2**31)-1の整数。 |
|
SHORTINT |
(-2**15)〜(2**15)-1の整数。 |
|
LONGINT |
(-2**63)〜(2**63)-1の整数。 |
|
DEC |
-(10**308)〜+(10**308)の小数(最大有効桁数15桁)。 |
|
SHORT |
-(10**38)〜+(10**38)の小数(最大有効桁数7桁)。 |
|
なし |
-(10**125)〜+(10**125)の小数(最大有効桁数38桁)。 |
|
なし |
データベース・キャラクタ・セットで1行に最大4000バイト。このデータ型は、データベースの |
|
なし |
UTF-8文字コードで1行に最大4000バイト。このデータ型は、データベースの |
|
なし |
データベース・キャラクタ・セットで1行にシングルバイト文字で最大8文字。 |
|
なし |
長さがsizeバイトのRAWバイナリ・データ。最大サイズは2000バイト。RAW値に対してサイズの指定が必須。ただし、このデータ型の変数を定義する際は、変数値に対する最大文字数を |
|
なし |
表の行のアドレスを一意に表すBASE64文字列。主に、ROWID疑似列によって返される値のためのデータ型。 |
|
なし |
索引編成表の行の論理アドレスを表すBASE64文字列。オプションのsizeは、UROWID型の列のサイズ。最大サイズおよびデフォルトは4000バイト。 |
|
値を特定のデータ型に変換せずに引数を処理する場合に、OLAP DMLプログラムの引数および一時変数に指定する。WKSDATAファンクションを使用して、 |
データ型のカテゴリ
通常、データ型が属するカテゴリとデータ型は、次のとおりです。
数値データ型: INTEGER
、SHORTINTEGER
、LONGINTEGER
、DECIMAL
、SHORTDECIMAL
およびNUMBER
テキスト・データ型: TEXT
、NTEXT
およびID
日時データ型と期間データ型: 日時データ型はDATETIME
、TIMESTAMP
、TIMESTAMP_TZ
およびTIMESTAMP-LTZ
、期間データ型はDSINTERVAL
およびYMINTERVAL
日付のみのデータ型: OLAP DML固有のDATE
データ型
ブール・データ型: BOOLEAN
行識別子データ型: ROWIDとUROWID
各OLAP DMLデータ・オブジェクトで使用できるデータ型の種類
オブジェクトの種類により、その値で使用されるデータ型が異なります。
変数では、すべてのデータ型がサポートされています。
ディメンションとサロゲートでは、INTEGER
、NUMBER
、TEXT
、ID
(単純なディメンションのみ)、NTEXT
、DATETIME
、TIMESTAMP
、TIMESTAMP_TZ
、TIMESTAMP-LTZ
、DSINTERVAL
およびYMINTERVAL
のデータ型がサポートされています。また、DEFINE DIMENSION(DWMQY)文を使用してDAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションを定義する場合、そのディメンションの値のデータ型は、日付のみになります。
表2-2「OLAP DMLの数値データ型」に示す数値データ型がサポートされています。
表2-2 OLAP DMLの数値データ型
データ型 | データ値 |
---|---|
|
(-2**31)〜(2**31)-1の整数。 |
|
(-2**15)〜(2**15)-1の整数。 |
|
(-2**63)〜(2**63)-1の整数。 |
|
-(10**308)〜+(10**308)の小数(最大有効桁数15桁)。 |
|
-(10**38)〜+(10**38)の小数(最大有効桁数7桁)。 |
|
-(10**125)〜+(10**125)の小数(最大有効桁数38桁)。 |
データを入力する場合、どのデータ型の値でも、プラス記号(+)またはマイナス記号(-)で始めることができますが、カンマを含めることはできません。ただし、他の数式に続く負の数の前にはカンマが必要です。カンマがない場合、マイナス記号は減算演算子として解釈されます。また、小数値には小数点を使用できます。データを表示する際、桁区切りおよび小数点は、NLS_NUMERIC_CHARACTERSオプションによって制御します。
ほとんどの数値データ型は、値が範囲外の場合、NA
を返します。ただし、LONGINTEGER
データ型にはオーバーフロー保護機能がないため、計算結果が範囲外の数値になるような場合、不適切な値が返されます。このことが問題になる場合は、LONGINTEGER
のかわりにNUMBER
データ型を使用してください。
NUMBER
変数を定義する場合、その精度(p)およびスケール(s)を指定し、適切な桁数を設定できます。精度は、有効桁数です。スケールには正または負を指定できます。正のスケールは小数点の右側の桁数を識別します。また負のスケールは小数点の左側の桁数を識別し、この部分は端数処理される場合があります。
NUMBER
データ型は、Oracle Databaseの標準ライブラリによってサポートされ、SQLでの動作と同様に動作します。テキスト・データ型またはINTEGER
データ型が適切でない場合に、ディメンションおよびサロゲートに使用されます。通常、計算(予測および集計など)に使用されない変数に代入され、データベースの丸め処理に一致する必要がある変数、または高い精度が要求される変数に使用されます。変数にNUMBER
データ型を割り当てるかどうかを判断する場合、パフォーマンスを最適化するために次の点に注意してください。
NUMBER
値はハードウェア(速度優先)ではなくソフトウェア(精度優先)で計算されるため、アナリティック・ワークスペースにおけるNUMBER
変数の計算は、他の数値データ型より遅くなります。
アナリティック・ワークスペースからNUMBER
データ型が含まれるリレーショナル列にデータがフェッチされる場合、アナリティック・ワークスペースでデータにすでにNUMBER
データ型が含まれている場合には、変換手順が不要なため、パフォーマンスが最適化されます。
Oracle OLAPでは、表2-3「OLAP DMLのテキスト・データ型」に示すテキスト・データ型がサポートされています。
表2-3 OLAP DMLのテキスト・データ型
データ型 | データ値 |
---|---|
|
データベース・キャラクタ・セットで1行に最大4000バイト。このデータ型は、データベースの |
|
UTF-8文字コードで1行に最大4000バイト。このデータ型は、データベースの |
|
データベース・キャラクタ・セットで1行にシングルバイト文字で最大8文字。 |
テキスト・リテラルは、一重引用符で囲む必要があります。Oracle OLAPは、引用符で囲まれていない英数字をオブジェクト名として認識し、二重引用符はコメントの開始として認識します。
引用符付き文字列内に引用符付き文字列を埋め込むことができます。これは、コンポジットまたは結合ディメンションのベース・ディメンション値を指定する場合、または値にアポストロフィが含まれている場合に必要となる処理です。Oracle OLAPでは、テキスト文字列であることを示すために一重引用符が使用されます。そのため一重引用符は、テキスト文字列の中で使用される場合は特殊記号とみなされます。したがって、テキスト文字列内で一重引用符のリテラル値を指定する場合は、引用符の前にバックスラッシュを付けます。
たとえば、New
York
およびApple
Sauce
がmarkprod
結合ディメンションのベース・ディメンション値の有効な組合せであるかどうかを確認するとします。次の文によって、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 認識されるエスケープ・シーケンス
シーケンス | 意味 |
---|---|
|
バックスペース。 |
|
改ページ。 |
|
ライン・フィード(改行)。 |
|
キャリッジ・リターン(改行)。 |
|
水平タブ。 |
|
二重引用符。 |
|
一重引用符。 |
|
バックスラッシュ。 |
|
ASCIIコードnnn(10進)の文字。 |
|
ASCIIコードnn(16進)の文字。 |
|
Unicode nnnnの文字。 |
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
データ型は時と分のデータは含まないため、通常、日付のみのデータ型と呼ばれます。
DATE型の有効な入力リテラル値は、数値、パック数値または月名という3つのスタイルのいずれか1つに従う必要があります。これらのスタイルは、セッション全体で混在していても構いません。
数値スタイル
次のルールに基づき、日、月、年を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のデータ型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
OLAP DMLの日時データ型は、DATETIME
、TIMESTAMP
、TIMESTAMP
_TZおよびTIMESTAMP
_LTZです。期間データ型は、YMINTERVAL
およびDSINTERVAL
です。日時と期間は両方ともフィールドで構成されています(「日時フィールドと期間フィールド」を参照)。
日時と期間は両方ともフィールドで構成されています。これらのフィールドの値によってデータ型の値が決まります。表2-7「日時フィールドと値」に、日時フィールドと、日時および期間で使用できる値を示します。
ヒント: 日時データの操作で予期しない結果にならないように、DBTIMEZONEとSESSIONTIMEZONEを使用してデータベースとセッションのタイムゾーンを確認できます。タイムゾーンを手動で設定しなかった場合、Oracle Databaseではデフォルトでオペレーティング・システムのタイムゾーンが使用されます。オペレーティング・システムのタイムゾーンが有効なOracleのタイムゾーンでない場合、Oracleではデフォルト値としてUTCが使用されます。 |
表2-7 日時フィールドと値
日時フィールド | 日時データ型の有効な値 | 期間データ型の有効な値 |
---|---|---|
|
-4712〜9999(0年を除く) |
任意の正および負の整数 |
|
01〜12 |
0〜11 |
|
01〜31(現行のNLS暦年のパラメータのルールに基づき、 |
任意の正および負の整数 |
|
00〜23 |
0〜23 |
|
00〜59 |
0〜59 |
|
00〜59.9(n)。ただし、9(n)は時刻の小数秒の精度。9(n)部分は |
0〜59.9(n)。ただし、9(n)は期間の小数秒の精度。 |
|
-12〜14(この範囲は夏時間への変更に対応)。 |
適用なし |
(表の終わりの注意を参照) |
00〜59。 |
適用なし |
|
|
適用なし |
|
|
適用なし |
注意: TIMEZONE_HOUR
とTIMEZONE_MINUTE
の両方を指定すると、書式+|- hh:mmのエンティティ(値は-12:59〜+14:00の範囲)として解釈されます。
日時書式テンプレートは、文字列に格納する日時データの書式を示すテンプレートです。書式モデルでは、データベースの値の内部表現は変更できません。文字列を日付に変換する場合、書式モデルによってOracle Databaseによる文字列の解釈方法が決定されます。OLAP DML文では、書式モデルをTO_CHAR
およびTO_DATE
ファンクションの引数として使用して次を指定できます。
Oracleでデータベースから値を返すのに使用する書式
Oracleでデータベースに格納するのに指定した値の書式
日時書式テンプレートは、次のファンクションで使用できます。
TO_*
日時ファンクション。このファンクションは、デフォルトの書式以外の書式の文字値を日時値に変換する場合に使用します。TO_
*日時ファンクションは、TO_CHAR
、TO_DATE
、TO_TIMESTAMP
、TO_TIMESTAMP_TZ
、TO_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の書式一致」を参照)。
OLAP DMLのDATETIMEデータ型は、SQLのDATE
データ型に対応します。DATETIME
値の書式および言語は、NLS_DATE_FORMATオプションおよびNLS_DATE_LANGUAGEオプションの設定によって制御されます。DATETIME
データ型は、Oracle Databaseの標準ライブラリによってサポートされ、OLAP DMLではSQLのDATE
データ型の動作と同様に動作します。
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
ファンクションは、現行のセッションの日付を返します。SYSDATE
、TO_*
日時ファンクション、およびデフォルトの日付書式の詳細は、「日時ファンクション」およびDATE_FORMATコマンドを参照してください。
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
は、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
は、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
は、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は、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
には秒の小数部を指定します。n
がfractional_seconds_precision
で指定される数より大きい桁数の場合、n
がfractional_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
値を表すことができます。
YES
、TRUE
、ON
NO
、FALSE
、OFF
BOOLEAN
式の使用については、「ブール式」を参照してください。
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データ型の実際の列を含むリレーショナル表およびクラスタを作成できますが、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言語リファレンス』の該当する項目の説明を参照してください。 |
一部のリレーショナル表の列は、物理的でないアドレスや永続的でないアドレス、あるいは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ファンクションを使用して別の結果を取得できます。