3

式は、次の目的に使用します。

次の項では、TimesTenの式について説明します。

式の指定

には、SQL処理で使用するを指定します。

式は、算術演算子、比較演算子、文字列またはバイナリ演算子、ビット演算子、または「関数」で説明するいずれかの関数で連結された1つまたは複数のプライマリで構成できます。プライマリは、SQL構文に示された項目から算出される、符号付きまたは符号なしの値です。

SQL構文

{ColumnName | ROWID | {? | :DynamicParameter} |
  Function | Constant | (Expression)}

または

[[+ |-] {ColumnName | SYSDATE | TT_SYSDATE|GETDATE() |
{? | :DynamicParameter} | Function |
Constant | {~ | + | -} Expression}]
 [...]

または

Expression1 [& | | | ^ | + | / | * | - ] Expression2

または

Expression1 | | Expression2

または

Expression
構成要素 説明

+, –

単項プラスと単項マイナス

単項マイナスはプライマリの符号を変更します。デフォルトの設定では、符号は変更しません。

ColumnName

値を取得する列の名前

詳細は、「名前、ネームスペースおよびパラメータ」を参照してください。

ROWID

表に保存される各行の一意のID

ROWID値はROWID擬似列から取得されます。

?

:DynamicParameter

動的パラメータのプレースホルダ

動的パラメータの値は、実行時に設定されます。

Function

計算された値

詳細は、「関数」を参照してください。

Constant

特定の値

詳細は、「定数」を参照してください。

(Expression)

カッコで囲まれた任意の式

Expression1

Expression2

指定された式

Expression1Expression2は、ビット単位演算子とともに使用すると、整数型またはバイナリ型にできます。式のデータ型には互換性が必要です。詳細は、「データ型」を参照してください。

*

2つのプライマリを乗算します

/

2つのプライマリを除算します

+

2つのプライマリを加算します

2つのプライマリを減算します

&

2つのオペランドのビット単位のAND

Expression1Expression2の対応するビットがどちらも1の場合にのみ、ビットを1に設定します。ビットが異なるか、いずれも0の場合は、ビットを0に設定します。

|

2つのオペランドのビット単位のOR

Expression1Expression2の対応するビットのうち、どちらかまたは両方が1の場合に、ビットを1に設定します。対応するビットの両方が0の場合は、ビットを0に設定します。

~

オペランドのビット単位のNOT

Expressionを1つのみ取り出し、オペランドの各ビットを逆にして、すべての1を0 (ゼロ)に、0 (ゼロ)を1に変更します。

^

2つのオペランドの排他OR

Expression1Expression2の対応するビットが異なる場合はビットを1に設定し、同じ場合は0 (ゼロ)に設定します。一方のビットが0(ゼロ)で他方のビットが1の場合、対応する結果ビットは1に設定されます。それ以外の場合、対応する結果ビットは0(ゼロ)に設定されます。

||

連結演算子

両方の式が文字列の場合に、Expression1Expression2を連結します。両方の式の値を含む、新しい文字列値を作成します。詳細は、「CONCAT」を参照してください。

説明

  • 数値間の計算には、算術演算子を使用できます。詳細は、「数値データ型」を参照してください。

  • 日時値および時間隔型でも、算術演算子を使用できます。日時式の結果は、日時データ型または時間隔データ型です。

  • 文字列値に算術演算子は使用できません。

  • 式の各要素は、次の順序で評価されます。

    • カッコ内の関数および式。

    • 単項プラスと単項マイナス。

    • *および/の演算

    • +およびの演算

    • 優先順位が同じ要素については、左から右の順に評価されます。

  • 式をカッコで囲み、評価の順序を制御できます。次に例を示します。

    10 * 2 – 1 = 19 but 10 * (2 – 1) = 10
    
  • 評価される式によっては、データ型の変換、切捨て、アンダーフロー、オーバーフローが発生する場合があります。詳細は、「データ型」を参照してください。

  • 数値式のいずれかのオペランドがNULLの場合、結果はNULLになります。

  • NVLは、2つのパラメータ(両方とも式で指定)をとるため、TimesTenではどちらの位置にもNULLは使用できません。式にNULL値が含まれる場合、比較演算子や他の条件はNULLと評価されます。NULL値を含む比較演算子や条件の評価の詳細は、「検索条件」を参照してください。TimesTenではNULLを挿入することはできますが、通常、INSERTには特定の値のみが使用され、一般的な式は使用されません。

  • 条件に、別々のROWID等式を指定するか、またはINを使用すると、問合せオプティマイザと実行エンジンで複数のROWID検索が可能です。たとえば、複数の高速ROWID検索は、次のように実行します。

    WHERE ROWID = :v1 OR ROWID = :v2
    

    または、次のように指定します。

    WHERE ROWID IN (:v1, :v2)
    
  • ?または:DynamicParameterは、式の中で動的パラメータとして使用できます。

この例では、任意のSELECT文のWHERE句における動的パラメータを示します。

SELECT * FROM purchasing.orders
  WHERE partnumber = ? AND ordernumber > ?
  ORDER BY ordernumber;

この例では、UPDATE文のWHERE句およびSET句における動的パラメータを示します。

UPDATE purchasing.parts
  SET salesprice = :dynamicparameter1
  WHERE partnumber = :dynamicparameter2;

この例では、DELETE文のWHERE句における動的パラメータを示します。

DELETE FROM purchasing.orderitems
  WHERE itemnumber BETWEEN ? AND ?;

この例では、INSERT文のVALUES句における動的パラメータを示します。この例では、?:dynamicparameterの両方が使用されています。:dynamicparameter1は、purchasing.orderitems表の2番目と4番目の列の両方に対応しています。そのため、この式には、2番目と4番目の列の両方に使用する2番目のパラメータを使用して、4つの動的パラメータのみを渡す必要があります。

INSERT INTO purchasing.orderitems VALUES  
   (?,:dynamicparameter1,
      :dynamicparameter2,
      :dynamicparameter1,?);

この例は、同じSQL文で?と:dynamicparameterの両方を使用できることと、両方のタイプの動的パラメータを繰り返すことの意味上の違いを示しています。

ビット単位演算子の例を次に示します。

Command> SELECT 0x183D & 0x00FF FROM dual;
< 003D >
1 row found.
Command> SELECT ~255 FROM dual;
< -256 >
1 row found.
Command> SELECT 0x08 | 0x0F FROM dual;
< 0F >
1 row found.

副問合せ

TimesTenでは、検索条件のINSERT...SELECT文、CREATE VIEW文またはUPDATE文、およびUPDATE文のSET句で、導出された表として副問合せがサポートされます。サポートされるのは、表の副問合せおよびスカラー副問合せです。TimesTenでは、行の副問合せはサポートされません。副問合せでは、HAVING句または結合表を使用して集計を指定できます。副問合せは相関も可能です。

SQL構文

[NOT] EXISTS | [NOT] IN (Subquery)
Expression {= | <> | > | >= | < | <= } [ANY | ALL] (Subquery)
Expression [NOT] IN (ValueList | Subquery)

ValueListは定数式のリストです。各定数式は、定数値または定数値になる式(数字、文字列、日付など)を指定します。バインドされた値(?または:DynamicParameter)、NULL、および定数値を返す関数のコールのサポートが含まれます。

説明

表の副問合せ:

  • 副問合せは、マテリアライズド・ビューを作成する文を除き、任意の文のWHEREまたはHAVING句に指定できます。表の副問合せは、1つの条件に1つのみ指定できます。これらの条件は、WHERE句やHAVING句、WHERE句やHAVING句内のOR式または結合された表のON句に指定できます。CASE式、マテリアライズド・ビューまたは外部結合のために+演算子を使用するHAVING句には指定できません。

  • 副問合せは、EXISTSまたはNOT EXISTS条件、ANYまたはALLを使用する限定条件または比較条件に指定できます。比較条件および限定条件の両方に使用できる演算子は、=<><=>=<>です。UNIQUEまたはNOT UNIQUE演算子を使用して、副問合せを外部問合せに連結することはできません。

  • 限定条件または比較条件に指定できる副問合せは1つのみです。副問合せは、条件の右側のオペランドまたは左側のオペランドとして指定します。両方には指定しません。

  • 副問合せにORDER BY句を指定することはできません。

  • FIRST NumRowsは、副問合せの文ではサポートされていません。

  • 限定条件または比較条件に指定された問合せでは、基礎となるSELECTの選択リストは単一の式にする必要があります。比較条件で指定される問合せの場合に、基礎となるSELECTが単一の行を戻すときは、その戻り値が選択結果になります。基礎となるSELECTが行を戻さない場合、戻り値はNULLです。副問合せが複数の行を戻す場合はエラーになります。

スカラー副問合せは単一の値を返します。外部問合せの各行に1行のみを戻すことを、コンパイル時にオプティマイザが検出できないような条件を含むスカラー副問合せは、検証できません。OR式にこのような副問合せを指定することはできません。

次に、1件以上の未発送の発注を含む顧客リストの副問合せの例を示します。

SELECT customers.name FROM customers
  WHERE EXISTS (SELECT 1 FROM orders
    WHERE customers.id = orders.custid
    AND orders.status = 'unshipped');

SELECT customers.name FROM customers
  WHERE customers.id = ANY 
    (SELECT orders.custid FROM orders
  WHERE orders.status = 'unshipped');

SELECT customers.name FROM customers 
  WHERE customers.id IN 
    (SELECT orders.custid FROM orders 
  WHERE orders.status = 'unshipped');

この例では、発注日と同じ日付に発送されたアイテムをリストします。

SELECT line_items.id FROM line_items 
  WHERE line_items.ship_date = 
    (SELECT orders.order_date FROM orders 
  WHERE orders.id = line_items.order_id);

定数

定数はリテラル値です。

SQL構文

{IntegerValue | FloatValue |FloatingPointLiteral|
    FixedPointValue | 'CharacterString'|
    'NationalCharacterString' | HexadecimalLiteral |
    'DateString' | DateLiteral |'TimeString' | 
    TimeLiteral | 'TimestampString' | TimestampLiteral |
    IntervalLiteral | BINARY_FLOAT_INFINITY |
    BINARY_DOUBLE_INFINITY | -BINARY_FLOAT_INFINITY |
    -BINARY_DOUBLE_INFINITY | BINARY_FLOAT_NAN |
     BINARY_DOUBLE_NAN
}
定数 説明

IntegerValue

TT_INTEGERTT_BIGINTTT_SMALLINTデータ型と互換性のある整数、またはTT_TINYINTデータ型と互換性のある符号なし整数です。

たとえば:

155, 5, -17

FloatValue

BINARY_FLOATデータ型またはBINARY_DOUBLEデータ型と互換性のある浮動小数点数です。

例:

.2E-4, 1.23e -4, 27.03, -13.1

FloatingPointLiteral

浮動小数点リテラル

これらは、BINARY_FLOATデータ型およびBINARY_DOUBLEデータ型と互換性があります。fまたはFは、数値が32ビット浮動小数点数(BINARY_FLOAT型)であることを示します。dまたはDは、数値が64ビット浮動小数点数(BINARY_DOUBLE型)であることを示します。たとえば:

123.23F, 0.5d

FixedPointValue

BINARY_FLOATBINARY_DOUBLENUMBERデータ型と互換性のある固定小数点数です。

たとえば:

27.03

CharacterString

CHARデータ型またはVARCHAR2データ型と互換性のある文字列です。

文字列定数は、一重引用符で囲みます。たとえば:

'DON''T JUMP!'

行中の2つの一重引用符は一重引用符として解釈され、区切り文字や空の文字列としては解釈されません。

NationalCharacterString

NCHARデータ型またはNVARCHAR2データ型と互換性のある文字列です。

各国語文字列定数の先頭には、Nまたはnのインジケータが付加され、一重引用符で区切られます。たとえば:

N'Here''s how!'

行中の2つの一重引用符は、一重引用符として解釈されます。

各国語文字列定数は、次の組合せで構成されます。

  • ASCII文字

  • UTF-8にエンコードされたUnicode文字

  • エスケープされたUnicode文字

ASCII文字およびUTF-8にエンコードされた文字は、対応するUTF-16書式のUnicode文字に内部的に変換されます。

エスケープされたUnicode文字の書式は、\uxxxxです。xxxxは、Unicode文字を表す4桁の16進数字です。たとえば:

N'This is an \u0061'

これは、次と同じです。

N'This is an a'

もう1つの\を使用して、\u自体をエスケープできます。シーケンス\\uは、常に\uに変換されます。他のエスケープ文字は認識されません。

HexadecimalLiteral

16進リテラル

数字0-9とA-F(またはa-f)を含む16進リテラルは、BINARYVARBINARYCHARVARCHAR2およびBLOBデータ型と互換性があります。HexadecimalLiteral定数の先頭には、文字0xを付加する必要があります。たとえば:

0xFFFAB0880088343330FFAA7

または

0x000A001231

奇数桁の16進数字の先頭には、偶数桁にするために0が付加されます。たとえば、値0x1230x0123に変換されます。

文字リテラルを指定する場合は、文字のバイナリ値を使用します。たとえば、次に、表tabvbVARBINARY列のcolbinに16進リテラルおよび文字リテラルが挿入されるときに格納される内容を示します。

Command> INSERT INTO tabvb VALUES (0x1234);
1 row inserted.
Command> INSERT INTO tabvb VALUES ('1234');
1 row inserted.
Command> SELECT colbin FROM tabvb;
< 1234 >
< 31323334 >
2 rows found.

ただし、Oracle Databaseは'1234'などの文字リテラルのみを受け入れ、その文字リテラルを0x1234のバイナリ・リテラルに変換する点が異なります。結果として、insert into tabvb values ('1234');は、Oracle DatabaseとTimesTenで動作が異なります。Oracle Databaseは、0x1234を16進リテラルとして受け入れません。

DateString

一重引用符(')で囲まれたYYYY-MM-DD HH:MI:SS書式の文字列です。

たとえば:

'2007-01-27 12:00:00'

YYYYフィールドの値は4桁である必要があります。MMDDフィールドには2桁の値を指定します。空白は、後続の空白(日のフィールドの後)のみ使用できます。範囲は'-4713-01-01'(紀元前4712年1月1日)から'9999-12-31'(9999年12月31日)までです。時刻部分は必須ではありません。たとえば:

'2007-01-27'

TT_DATEデータ型の場合、文字列の書式はYYYY-MM-DDになります。範囲は、'1753-01-01'から'9999-12-31'までです。

DateLiteral

書式: DATE DateString

たとえば:

DATE '2007-01-27' or DATE '2007-01-27 12:00:00'

TT_DATEデータ型の場合、リテラルTT_DATEを使用します。たとえば:

TT_DATE '2007-01-27'. 

TT_DATEリテラルでは時刻部分は指定しないでください。

DATEキーワードの大文字と小文字は区別されません。

TimesTenでは、ODBCの日付リテラル構文もサポートされます。たとえば:

{d '2007-01-27'}. 

詳細はODBCドキュメントを参照してください。

TimeString

一重引用符(')で囲まれたHH:MI:SS書式の文字列です。

たとえば:

'20:25:30'

範囲は'00:00:00'から'23:59:59'までです。コンポーネントはすべて2桁である必要があります。後続の空白(2番目のフィールドの後)のみ使用できます。

TimeLiteral

書式: TIME TimeString

たとえば:

TIME '20:25:30'

TIMEキーワードの大文字と小文字は区別されません。

使用例:

INSERT INTO timetable VALUES (TIME '10:00:00');

SELECT * FROM timetable WHERE col1 < TIME '10:00:00';

TimesTenでは、ODBCの時間リテラル構文もサポートされます。たとえば:

{t '12:00:00'}

TimestampString

一重引用符(')で囲まれたYYYY-MM-DD HH:MI:SS [.FFFFFFFFF]書式の文字列です。

範囲は'-4713-01-01' (紀元前4712年1月1日)から '9999-12-31' (9999年12月31日)までです。年のフィールドは、4桁である必要があります。他のフィールドは、小数部を除いて2桁の値である必要があります。小数部は0から9桁で指定できます。TT_TIMESTAMPデータ型の場合、一重引用符(')で囲まれたYYYY-MM-DD HH:MI:SS[.FFFFFF]書式の文字列です。範囲は'1753-01-01 00:00:00.000000'から'9999-12-31 23:59:59.999999'です。小数部は0から6桁で指定できます。

C1というCHAR列があり、TIMEを比較する場合は、次の文を実行できます。

SELECT * FROM testable WHERE C1 = TIME '12:00:00'

この例では、C1の値が適切なTIME構文に従っていれば、C1から得られるCHARの各値は、比較の前にTIME値に変換されます。

TimestampLiteral

書式: TIMESTAMP TimestampString

たとえば:

TIMESTAMP '2007-01-27 11:00:00.000000'

TIMESTAMPデータ型の場合は、小数フィールドで0から9桁の小数秒がサポートされます。TT_TIMESTAMPデータ型の場合は、小数フィールドで0から6桁の小数秒がサポートされます。

TIMESTAMPキーワードの大文字と小文字は区別されません。

CHARデータ型およびVARCHAR2データ型のDATE/TIME/TIMESTAMPの比較を実行するには、リテラル構文を使用します。

TimesTenでは、ODBCのタイムスタンプ・リテラル構文もサポートされます。たとえば:

{ts '9999-12-31 12:00:00'}

IntervalLiteral

書式: INTERVAL [+\-] CharacterString IntervalQualifier

たとえば:

INTERVAL '8' DAY

BINARY_FLOAT_INFINITY | BINARY_DOUBLE_INFINITY

正の無限大

INF(正の無限大)は、BINARY_FLOATデータ型およびBINARY_DOUBLEデータ型と互換性があるIEEE浮動小数点値です。定数値BINARY_FLOAT_INFINITYまたはBINARY_DOUBLE_INFINITYを使用して、正の無限大を表します。

-BINARY_FLOAT_INFINITY | -BINARY_DOUBLE_INFINITY

負の無限大

-INF(負の無限大)は、BINARY_FLOATデータ型およびBINARY_DOUBLEデータ型と互換性があるIEEE浮動小数点値です。定数値-BINARY_FLOAT_INFINITYおよび-BINARY_DOUBLE_INFINITYを使用して、負の無限大を表します。

BINARY_FLOAT_NAN |

BINARY_DOUBLE_NAN

非数

NaN(非数)は、BINARY_FLOATデータ型およびBINARY_DOUBLEデータ型と互換性があるIEEE浮動小数点値です。定数値BINARY_FLOAT_NANまたはBINARY_DOUBLE_NANを使用して、NaNを表します。

書式モデル

書式モデルは、文字列に格納された日時および数値データの書式を示す文字リテラルです。文字列を日付または数値に変換する場合は、書式モデルによって、TimesTenでの文字列の解釈方法が決まります。

この項では、次の書式モデルについて説明します。

数値書式モデル

数値書式モデルは、次の関数で使用します。

  • NUMBERBINARY_FLOATまたはBINARY_DOUBLEデータ型の値をVARCHAR2データ型に変換するTO_CHAR関数。

  • CHARまたはVARCHAR2データ型の値をNUMBERデータ型に変換するTO_NUMBER関数。

デフォルトのamerican_america NLS言語および地域の設定が使用されます。

数値書式モデルは、1つ以上の数値書式要素で構成されます。次の表に、数値書式モデルの要素を示します。数値書式モデルに書式要素MISまたはPRが指定されないかぎり、負の戻り値の先頭には自動的に負の符号が付けられ、正の戻り値の先頭には空白が付けられます。

表3-1 数値書式要素

要素 説明

, (カンマ)

9,999

指定された位置にカンマを戻します。1つの数値書式モデルに複数のカンマを指定できます。

制限:

  • 数値書式モデルでは、先頭をカンマ要素にすることはできません。

  • 数値書式モデルでは、小数点文字(ピリオド)の右側にカンマは使用できません。

. (ピリオド)

99.99

指定された位置に小数点(ピリオド(.))を戻します。

制限:

1つの書式モデルで指定できるピリオドは1つのみです。

$

$9999

先行ドル記号を含む値を戻します。

0

0999

9990

先行0 (ゼロ)を戻します。

後続0 (ゼロ)を戻します。

9

9999

指定された桁数の値を戻します。正の場合は先行空白が含まれ、負の場合は先行マイナスが含まれます。

固定小数点数の整数部分の場合、先行0(ゼロ)に対して空白を戻します。ただし、値0(ゼロ)に対しては0(ゼロ)を戻します。

B

B9999

固定小数点数の整数部分が0(ゼロ)の場合、空白を戻します(書式モデル内の0(ゼロ)には関係ありません)。

C

C999

指定された位置にISO通貨記号を戻します。

D

99D99

指定された位置に小数点文字を戻します。デフォルトはピリオド(.)です。

制限:

1つの数値書式モデルで指定できる小数点文字は1つのみです。

EEEE

9.9EEEE

科学表記法で値を戻します。

G

9G999

指定された位置にグループ・セパレータを戻します。1つの数値書式モデルに複数のグループ・セパレータを指定できます。

制限:

数値書式モデルでは、小数点文字(ピリオド)の右側にグループ・セパレータは使用できません。

L

L999

指定した位置にローカル通貨記号を戻します。

MI

999MI

後続のマイナス符号(-)を含む負の値を戻します。

後続の空白を含む正の値を戻します。

制限:

MI書式の要素は、数値書式モデルの末尾にのみ使用できます。

PR

999PR

山カッコ(< >)の中に負の値を戻します。

先行および後続の空白を含む正の値を戻します。

制限:

PR書式の要素は、数値書式モデルの末尾にのみ使用できます。

RN

RN

値を大文字のローマ数字として戻します。

rn

rn

値を小文字のローマ数字として戻します。

1から3999までの整数を値として指定できます。

S

S9999

先行のマイナス符号(-)を含む負の値を戻します。

先行のプラス符号(+)を含む正の値を戻します。

S

9999S

後続のマイナス符号(-)を含む負の値を戻します。

後続のプラス符号(+)を含む正の値を戻します。

制限:

S書式の要素は、数値書式モデルの先頭または末尾にのみ使用できます。

TM

TM

テキストの最小数値書式モデルは、文字の最小数を(10進出力で)戻します。この要素の大文字と小文字は区別されません。

デフォルトはTM9で、出力が64文字を超えないかぎり、固定表記法で数値を戻します。出力が64文字を超える場合は、TimesTenによって自動的に科学表記法で数値が戻されます。

制限:

  • この要素の前に他の要素を指定することはできません。

  • この要素の後に、9を1つか、Eを1つか、または(e)を指定できますが、これらを組み合せることはできません。次の文は、エラーを戻します。

    SELECT TO_NUMBER (1234, 'TM9e') FROM dual;

U

U9999

指定された位置にユーロまたは他の二重通貨記号を戻します。

V

999V99

10nを乗算した値を戻します(この値は必要に応じて丸められます)。nVに続く9の数です。

X

XXXX

指定された桁数の16進値を戻します。指定された数値が整数でない場合は、TimesTenによって整数に丸められます。

制限:

  • この要素は、正の値または0(ゼロ)のみを受け入れます。負の値はエラーを戻します。

  • この要素の前には、先行の0(ゼロ)を戻す0(ゼロ)またはFMのみを指定できます。その他の要素はすべてエラーを戻します。Xに0(ゼロ)もFMも指定しない場合は、常に戻り値に先行空白が含まれます。

日時書式モデル

日時書式モデルは、次の関数で使用します。

  • 日時値のデフォルト書式以外の文字値を変換するTO_CHARTO_DATEおよびTO_TIMESTAMP関数。

  • デフォルト書式以外の日時値を文字列に変換するTO_CHAR関数。

日時書式モデルの合計の長さは、22文字を超えることができません。

デフォルトのamerican_america NLS言語および地域の設定が使用されます。

日時書式要素

日時書式モデルは、1つ以上の日時書式要素で構成されます。表3-2に、日時フォーマットの要素を示します。次の追加事項もあります。

  • 入力書式モデルの場合、書式要素は複数回出現できず、類似した情報を表す書式要素は結合できません。たとえば、同じ書式文字列でSYYYYおよびBC書式要素は使用できません。

  • DATE書式要素の場合、スペル表記される単語、略語、またはローマ数字での大文字化は、対応する書式要素の大文字化に従います。たとえば、日付書式モデルDAYでは、MONDAYのように大文字化された単語が生成されますが、DayではMondayが、dayではmondayが生成されます。

表3-2 日時書式要素

要素 説明

-/,.;:"text"

句読点と引用符付きテキストは、結果で複製されます。

AD

A.D.

ピリオド付きまたはピリオドなしで西暦を示す。

AM

A.M.

ピリオド付きまたはピリオドなしで午前を示す。

BC

B.C.

ピリオド付きまたはピリオドなしで紀元前を示す。

CC

SCC

TO_CHARで有効です。

世紀:

  • 4桁の年の下2桁が01から99 (01および99を含む)の場合、世紀はその年の上2桁に1を加えた値になります。

  • 4桁の年の下2桁が00の場合、世紀はその年の上2桁と等しい値になります。

たとえば、2002は21を返し、2000は20を返します。

D

曜日(1から7)。

DAY

曜日。最大幅の名前を表示するために空白で埋められます。

DD

日付(1から31)。

DDD

通日。

DL

長い日付書式。

デフォルトのAMERICAN_AMERICAロケールの場合、これは、書式'fmDay, Month dd, yyyy'を指定することと同じになります。

制限:

この書式は、空白で区切られたTS要素でのみ指定できます。

DS

短い日付書式

デフォルトのAMERICAN_AMERICAロケールの場合、これは、書式'MM/DD/RRRR'を指定することと同じになります。

制限:

この書式は、空白で区切られたTS要素でのみ指定できます。

DY

曜日の省略名。

FF[1-9]

TO_TIMESTAMPで有効です。

小数秒。基数文字は出力されません。基数文字を追加するにはX書式要素を使用します。返されるデータ時間値の小数秒部分の桁数を指定するには、FFの後に1から9の数字を使用します。桁数を指定しない場合、値は日時データ型に指定された精度、またはデータ型のデフォルト精度によって決定されます。

FM

先行および後続する空白を持たない値を返します。

FX

文字データと書式モデルの完全一致を返します。

HH

HH12

時(1から12)。

HH24

時(0から23)。

IW

TO_CHARで有効です。

ISO 8601標準で定義されているカレンダ年の週(1から52または1から53)。

  • カレンダ週は月曜日から始まります。

  • 年の最初のカレンダ週は、1月4日を含みます。

  • 年の最初のカレンダ週は、12月29、30、31日を含む場合があります。

  • 年の最後のカレンダ週は、1月1、2、3日を含む場合があります。

IYYY

TO_CHARで有効です。

ISO 8601標準で定義されているカレンダ週を含む、4桁の年。

IYY

IY

I

TO_CHARで有効です。

ISO 8601標準で定義されているカレンダ週を含む、下3桁、2桁または1桁の年。

J

ユリウス日。

紀元前4712年1月1日からの日数です。Jで指定される数値は整数である必要があります。

MI

分(0から59)。

MM

月(01から12。1月=01)。

MON

月の省略名。

MONTH

月の名前。最大幅の名前を表示するために空白で埋められます。

PM

P.M.

ピリオド付きまたはピリオドなしで午前を示す。

Q

TO_CHARで有効です。

年の四半期(1、2、3、4)。1月=1。

RM

ローマ数字での月(IからXII。1月=I)。

RR

20世紀の年(21世紀に2桁のみを使用)

RRRR

丸めた年。

4桁または2桁のいずれも入力可能。2桁の場合、RRと同じ値が返される。この機能を使用しない場合は、4桁の年を入力する。

SS

秒(0から59)。

SSSSS

午前0時以降の秒数(0から86399)。

TS

短い時間書式で値を返す。

制限:

この書式は、空白で区切られたDL要素またはDS要素でのみ指定できます。

WW

TO_CHARで有効です。

年の週(1から53)。週1は年の最初の日で始まり、その年の7番目の日まで続きます。

W

TO_CHARで有効です。

月の週(1から5)。週1はその月の最初の日で始まり、7番目の日で終了します。

X

ローカル基数文字

たとえば:

'HH:MI:SSXFF'

Y,YYY

指定の位置にカンマを付けた年

YEAR

SYEAR

TO_CHARで有効です。

スペル表記された年。Sによって、紀元前の日付の前にマイナス符号(-)が付けられます。

YYYY

SYYYY

4桁の年。

Sによって、紀元前の日付の前にマイナス符号が付けられます。

YYY

YY

Y

年の下3桁、下2桁または下1桁

ROUNDおよびTRUNC日付関数の書式モデル

次の表に、ROUNDおよびTRUNC日付関数に使用可能な書式モデルと、日付が丸められる場合や切り捨てられる場合の単位を示します。デフォルトのモデルDDでは、時刻部分が午前0時に丸められるか切り捨てられた日付が戻されます。

書式モデル 丸め単位または切捨て単位

CC

SCC

世紀

4桁の年の下2桁が01から99(01および99を含む)の場合、世紀はその年の上2桁に1を加えた値になります。

4桁の年の下2桁が00の場合、世紀はその年の上2桁と等しい値になります。たとえば、2002は21を返し、2000は20を返す。

SYYYY

YYYY

YEAR

SYEAR

YYY

YY

Y

年(7月1日で切上げ)

IYYY

IYY

IY

I

ISO年

Q

四半期(四半期の2番目の月の16日で切上げ)

MONTH

MON

MM

RM

月の名前(16日で切上げ)

WW

対象となる年の最初の日と同じ曜日

IW

ISO週の最初の日と同じ曜日(月曜日)

W

対象となる月の最初の日と同じ曜日

DDD

DD

J

通日

DAY

DY

D

開始曜日

HH

HH12

HH24

MI

TimesTen日時データ型TO_CHARの書式モデル

この書式モデルは、TO_CHAR関数を呼び出してTT_TIMESTAMPまたはTT_DATEの日時値を変換する場合に使用します。また、TO_CHAR関数を呼び出してNUMBERまたはORA_FLOAT以外の任意の数値を変換する場合にも使用します。

  • 指定した書式に数値が適合しない場合、値は切り捨てられます。

  • 書式文字列は、50文字以内で指定します。

  • Dの結果は、常に小数点になります。NLSパラメータを使用して、その値を変更することはできません。

  • 1e-126未満または1e126より大きい絶対値を含む浮動小数点を、TO_CHAR関数への入力として指定した場合、エラーが発生します。

書式 説明

DD

日付(1から31)

MM

月(1から12)

MON

月(3文字の接頭辞)

MONTH

月(空白が埋め込まれた9文字の正式名)

YYYY

年(4桁)

Y,YYY

年(カンマ付き)

YYY

年(末尾3桁)

YY

年(末尾2桁)

Y

年(末尾1桁)

Q

四半期

HH

時(1から12)

HH12

時(1から12)

HH24

時(0から23)

MI

分(0から59)

SS

秒(0から59)

FF

6桁の精度の秒の小数部

FFn

nで指定される精度の秒の小数部

AM

正午標識

A.M.

正午標識

PM

正午標識

P.M.

正午標識

- /  ,  . ; :

出力される記号

"text"

出力されるテキスト

9

0

先行または後続0(ゼロ)

.

小数点

,

カンマ

EEEE

科学表記法

S

符号モード

B

空白モード

数字がない場合、文字列は空白で埋められます。

FM

非空白モード(埋込みモード)

この要素が使用される場合、後続または先行の空白は削除されます。

$

先行ドル記号

CASE式

条件付きの値を指定します。単純なCASE式と検索対象のCASE式がサポートされています。CASE式は、式を任意の場所で指定でき、必要に応じて何度でも使用できます。

一連のIF文を使用するかわりに、CASE式を使用すると、条件が満たされた場合に適切な値を返す一連の条件を使用できます。CASE式を使用すると、問合せを簡略化し、効率のよいコードを記述できます。

SQL構文

検索対象のCASE式の構文は、次のとおりです。

CASE
  {WHEN SearchCondition THEN Expression1}[…] 
   [ELSE Expression2]
END

単純なCASE式の構文は、次のとおりです。

CASE Expression 
  {WHEN CompExpression THEN Expression1}[…]
   [ELSE Expression2] 
END

パラメータ

CASEには、次のパラメータがあります。

パラメータ 説明

WHEN SearchCondition

検索条件を指定します。この句は副問合せを指定できません。

WHEN CompExpression

比較するオペランドを指定します。

CompExpressionと比較する最初のオペランドを指定します。

THEN Expression1

結果の式を指定します。

ELSE Expression2

条件を満たさない場合の結果の式を指定します。ELSE句を指定しないと、TimesTenによってELSE NULL句が式に追加されます。

説明

CASE式は、INSERT文の値の句の中では指定できません。

色の値を指定する検索対象のCASE文を指定するには、次の文を使用します。

SELECT CASE 
  WHEN color=1 THEN 'red' 
  WHEN color=2 THEN 'blue' 
  ELSE 'yellow' 
END FROM cars;

色の値を指定する単純なCASE文を指定するには、次のようにします。

SELECT CASE color 
  WHEN 1 THEN 'red' 
  WHEN 2 THEN 'blue' 
  ELSE 'yellow' 
END FROM cars;

ROWID疑似列

TimesTenでは、表に保存される各行にROWIDと呼ばれる一意のIDが割り当てられます。このrowid (ROWID疑似列と呼ばれる)のデータ型はROWIDです。

TimesTen Scaleoutでは、ROWID疑似列はTimesTen Classicとは異なる意味を持ちます。

TimesTen Scaleoutの場合:

  • TimesTen Scaleoutでは、すべての要素にわたる一意性を確保するために、ROWIDが使用されます。

  • ROWIDは、行の特定のコピーの識別子です。コピー元の要素が使用可能でないためにそのコピーが使用可能ではない場合は、ROWIDで行にアクセスできません。この場合は、主キーで行にアクセスする必要があります。

  • 行の各コピーには異なるROWID値があります。このことは、K-safetyが1に設定されている複製分散スキーム、およびK-safetyが2に設定されているすべての表(どのような分散スキームでも)に該当します。この場合、ROWIDベースのアクセスを使用すると、TimesTen Scaleoutは最初のデータ領域のROWIDの値を返します。

  • アプリケーションにはROWID値を格納せず、これらの値を後で使用するようにしてください。

  • ROWID値は、(データの再分散によって)データの場所が変更された場合、変化することがあります。

    ttGridAdmin dbDistributeコマンドの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』データベースの分散スキーム(dbDistribute)の設定または変更に関する項を参照してください。

  • TimesTen Scaleoutでは、ROWIDデータ型はサポートされていません。

TimesTen Classicの場合:

  • ROWIDは、ROWID擬似列を問い合せることで確認できます。

  • ROWIDは(実際の列ではなく)疑似列であるため、データベース領域は必要ありません。ROWIDを更新したり、索引を作成したり、削除することはできません。

  • ROWID値は、表に行が存在する間は保持されます。

  • ROWID値は、リカバリ、バックアップおよびリストア処理を行っても保持されます。ただし、レプリケーションの結果として、またはttMigrateを実行してデータベースから行を移行し、データベースに戻した結果として作成された行のコピー、またはttBulkCpを実行してデータベースから行をコピーし、データベース戻した結果として作成された行のコピーは、元の行とは異なるROWID値になります。

TimesTen Scaleoutの詳細は、『Oracle TimesTen In-Memory Database Scaleoutユーザーズ・ガイド』データ分散におけるのROWIDの理解に関する項を参照してください。

TimesTen ClassicのROWIDの詳細は、「式の指定」を参照してください。ROWIDデータ型の詳細は、「ROWIDデータ型」を参照してください。

ROWNUM疑似列

問合せによって戻される行ごとに、ROWNUM擬似列によって、行が選択された順序を示す数値が戻されます。最初に選択された行にはROWNUMとして1が、2番目に選択された行にはROWNUMとして2が割り当てられ、以降も同様の割当てが行われます。

次の例に示すようにROWNUMを使用して、問合せによって戻される行数を制限します。

SELECT * FROM employees WHERE ROWNUM < 10;

行が選択された順序は、使用している索引および結合順序によって異なります。ORDER BY句を指定すると、ソートが行われる前にROWNUMが割り当てられます。ただし、ORDER BY句を指定すると、使用している索引および結合順序が変更される可能性があります。選択された行の順序が変更されると、選択された各行に関連付けられているROWNUM値も変更される可能性があります。

たとえば、別の索引が使用された場合、次の問合せは、以前に実行した問合せとは異なる従業員を戻す可能性があります。

SELECT * FROM employees WHERE ROWNUM < 10 ORDER BY last_name;

比較条件「ROWNUM値>正の整数」は、常に偽となるため注意してください。たとえば、次の問合せでは行が戻されません。

SELECT * FROM employees WHERE ROWNUM > 1;

ROWNUMを使用して一意の値を表の各行に割り当てます。たとえば:

UPDATE my_table SET column1 = ROWNUM;

問合せにFIRST NumRowsまたはROWS m TO nが含まれている場合は、戻される行の数を制限するためにROWNUMを使用しないでください。たとえば、次の問合せでは、エラー・メッセージが戻されます。

SELECT FIRST 2 * FROM employees WHERE ROWNUM <1 ORDER BY employee_id;
2974: Using rownum to restrict number of rows returned cannot be combined with 
first N or rows M to N

TimesTen Scaleoutの疑似列

疑似列は、表の実際の列ではありませんが、列と同じように動作します。疑似列は、列と同じコンテキストで使用される割当て値ですが、保存されません。

疑似列には選択操作を実行できますが、挿入操作や更新操作は実行できません。

TimesTen Scaleoutの疑似列は次のとおりです。

  • elementId#: データベースの一部を格納する要素。elementId#疑似列を使用して、行へのアクセス元の要素を判別します。この疑似列は、NOT NULL TT_INTEGERデータ型を戻します。

  • replicaSetId#: この疑似列を使用して、行が格納されているレプリカ・セットを判別します。この疑似列は、NOT NULL TT_INTEGERデータ型を戻します。

  • dataspaceId#: この疑似列を使用して、行のコピーが配置されているデータ領域を判別します。この疑似列は、NOT NULL TT_INTEGERデータ型を戻します。

ノート:

  • DML操作の場合、elementId#のかわりにreplicaSetId#を使用します。これは、SELECT...FOR UPDATEについても同様です。

  • SELECT操作の場合は、特定の要素から行を選択する場合を除いて、replicaSetId#を使用します。この場合、SELECT文でTT_GridQueryExec (GLOBAL)オプティマイザ・ヒントを使用します。詳細は、「TT_GridQueryExecオプティマイザ・ヒント」を参照してください。

次の各セクションでは、疑似列の使用方法について説明します。

疑似列を使用したデータの検索

この例では、疑似列を使用してデータを検索する方法を示します。まず、アプリケーションに接続する要素を判別します。次に、customers表に対する問合せが発行され、データが配置されているelementId#replicaSetId#およびdataspaceId#が戻されます。

Command> SELECT elementid# FROM dual;
< 1 >
1 row found.

Command> SELECT elementId#,replicasetid#,dataspaceId#,cust_id,last_name,first_name
         FROM customers WHERE cust_id BETWEEN 910 AND 920
         ORDER BY cust_id, last_name, first_name;
< 3, 2, 1, 910, Riley, Tessa >
< 1, 1, 1, 911, Riley, Rashad >
< 1, 1, 1, 912, Riley, Emma >
< 1, 1, 1, 913, Rivera, Erin >
< 1, 1, 1, 914, Roberts, Ava >
< 1, 1, 1, 915, Roberts, Lee >
< 3, 2, 1, 916, Roberts, Clint >
< 5, 3, 1, 917, Robertson, Faith >
< 3, 2, 1, 918, Robinson, Miguel >
< 3, 2, 1, 919, Robinson, Mozell >
< 5, 3, 1, 920, Rodgers, Darryl >
11 rows found.

疑似列および重複表の使用

この例では、重複表で疑似列を使用する方法を示します。まず、account_status表に対してttIsql describeコマンドを使用して、表が複製分散スキームであるかどうかを確認します。次に、要素1に接続されている接続から問合せを発行します。elementId#replicasetId#およびdataspaceId#が戻され、データの場所を判別できます。この例では、要素2に接続されている接続から同じ問合せを繰り返します。この例は、データがアプリケーションの接続先の要素に配置され、データベースのすべての要素に存在することを示しています(複製分散スキーム)。

Command> describe account_status;
 
Table SAMPLEUSER.ACCOUNT_STATUS:
  Columns:
   *STATUS                          NUMBER (2) NOT NULL
    DESCRIPTION                     VARCHAR2 (100) INLINE NOT NULL
  DUPLICATE
 
1 table found.
(primary key columns are indicated with *)
Command> SELECT elementId# FROM dual; 
< 1 >
1 row found.

Command> SELECT elementId#,replicaSetId#,dataspaceId#, *
         FROM account_status;
< 1, 1, 1, 10, Active - Account is in good standing >
< 1, 1, 1, 20, Pending - Payment is being processed >
< 1, 1, 1, 30, Grace - Automatic payment did not process successfully >
< 1, 1, 1, 40, Suspend - Account is in process of being disconnected >
< 1, 1, 1, 50, Disconnected - You can no longer make calls or receive calls >
5 rows found.

接続から要素2に同じ問合せを発行します。

Command> SELECT elementid# from dual;
< 2 >
1 row found.

Command> SELECT elementId#,replicaSetId#,dataspaceId#, *
         FROM account_status;
< 2, 1, 2, 10, Active - Account is in good standing >
< 2, 1, 2, 20, Pending - Payment is being processed >
< 2, 1, 2, 30, Grace - Automatic payment did not process successfully >
< 2, 1, 2, 40, Suspend - Account is in process of being disconnected >
< 2, 1, 2, 50, Disconnected - You can no longer make calls or receive calls >
5 rows found.

疑似列を使用したローカル要素の検索

この例では、アプリケーションに接続する要素の情報を返すために疑似列を使用する方法を示します。6つのデータ・インスタンスを含み、K-safetyを2に設定したグリッドを作成したと仮定します。この例の目的は、アプリケーションの接続先の要素の要素ID、レプリカ・セットおよびデータ領域グループを特定する方法を示すことです。

この例では、接続の接続先は要素1です。dual表から選択すると、現在のローカル接続の要素ID、レプリカ・セットIDおよびデータ領域IDが戻されます。この例では、要素1はレプリカ・セット1およびデータ領域1にあります。

Command> SELECT elementId#,replicaSetId#,dataspaceId# FROM dual;
< 1, 1, 1 >
1 row found.

この例では、接続の接続先は要素3です。要素3はレプリカ・セット2およびデータ領域1にあります。

Command> SELECT elementId#,replicaSetId#,dataspaceId# FROM dual;
< 3, 2, 1 >
1 row found.

インスタンスに関連付けられた要素IDの表示

この例は、ttGridAdmin dbStatus -elementコマンドを使用して、各インスタンスに関連付けられた要素IDを表示する方法を示しています。このコマンドによって、各要素のステータスも示されます。(このコマンドは、アクティブな管理インスタンスから、インスタンス管理者として発行する必要があります)。

詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』データベースのステータスのモニター(dbStatus)に関する項を参照してください。

$ ttGridAdmin dbStatus -element
Database database1 element level status as of Thu Apr  5 12:57:44 PDT 2018
 
Host            Instance Elem Status Date/Time of Event  Message
--------------- -------- ---- ------ ------------------- -------
host1           instance1    1 opened 2018-04-05 11:15:33
host2           instance2   2 opened 2018-04-05 11:15:33
host3           instance3   3 opened 2018-04-05 11:15:33
host4           instance4   4 opened 2018-04-05 11:15:33
host5           instance5   5 opened 2018-04-05 11:15:33
host6           instance6   6 opened 2018-04-05 11:15:33