式には、SQL処理で使用する値を指定します。
式は、算術演算子、比較演算子、文字列またはバイナリ演算子、ビット演算子、あるいはこの章で説明する任意の関数で連結された1つまたは複数のプライマリで構成できます。 プライマリは、SQL構文に示された項目から算出される、符号付きまたは符号なしの値です。
{ColumnName
| ROWID | {? | :DynamicParameter
} |AggregateFunction
|Constant
| (Expression
)} or [[+ |-] {ColumnName
| SYSDATE | TT_SYSDATE|GETDATE() | {? | :DynamicParameter
} |AggregateFunction
|Constant
| {~ | + | -}Expression
}] [...]
または
Expression1
[& | | | ^ | + | / | * | - ]Expression2
または
Expression1
| |Expression2
または
Expression
構成要素 | 説明 |
---|---|
+, – | 単項プラスと単項マイナス。単項マイナスはプライマリの符号を変更します。デフォルトの設定では、符号は変更しません。 |
ColumnName |
値を取得する列の名前。 列名の詳細は、第2章「名前およびパラメータ」を参照してください。 |
ROWID | TimesTenでは、表に保存される各行にROWIDと呼ばれる一意のIDが割り当てられます。 ROWID値はROWID擬似列から取得されます。 |
? | 動的パラメータのプレースホルダ。
動的パラメータの値は、実行時に設定されます。 |
AggregateFunction |
計算された値。 「集計関数」を参照してください。 |
Constant |
特定の値。「定数」を参照してください。 |
(Expression ) |
カッコで囲まれた任意の式 |
Expression1
|
Expression1 およびExpression2 は、ビット単位演算子とともに使用すると、整数型またはバイナリ型にできます。両方の式のデータ型には互換性が必要です。 第1章「データ型」を参照してください。 |
* | 2つのプライマリを乗算します。 |
/ | 2つのプライマリを除算します。 |
+ | 2つのプライマリを加算します。 |
– | 2つのプライマリを減算します。 |
& | 2つのオペランドのビット単位のAND。 Expression1 およびExpression2 の対応するビットがどちらも1の場合にのみビットを1に設定し、ビットが異なるかどちらも0の場合にビットを0に設定します。 |
| | 2つのオペランドのビット単位のOR。 Expression1 およびExpression2 の対応するビットのうち、いずれかまたは両方が1の場合にビットを1に設定し、対応するビットの両方が0の場合にビットを0に設定します。 |
~ | オペランドのビット単位のNOT。 Expressionを1つのみ取り出し、オペランドの各ビットを逆にして、すべての1を0(ゼロ)に、0(ゼロ)を1に変更します。 |
^ | 2つのオペランドの排他OR。 Expression1 およびExpression2 の対応するビットが異なる場合にビットを1に設定し、同じ場合に0(ゼロ)に設定します。 一方のビットが0(ゼロ)で他方のビットが1の場合、対応する結果ビットは1に設定されます。それ以外の場合、対応する結果ビットは0(ゼロ)に設定されます。 |
| | | 両方の式が文字列の場合に、Expression1 とExpression2 を連結します。両方の式の値を含む、新しい文字列値を作成します。 「CONCAT」も参照してください。 |
説明
数値間の計算には、算術演算子を使用できます。 「数値データ型」を参照してください。
文字列値に算術演算子は使用できません。
式の各要素は、次の順序で評価されます。
カッコ内の集計関数および式。
単項プラスと単項マイナス。
*および/処理。
+および–処理。
優先順位が同じ要素については、左から右の順に評価されます。
式をカッコで囲み、評価の順序を制御できます。次に例を示します。
10 * 2 – 1 = 19 but 10 * (2 – 1) = 10
評価される式によっては、データ型の変換、切捨て、アンダーフロー、オーバーフローが発生する場合があります。 第1章「データ型」を参照してください。
数値式のいずれかのオペランドがNULLの場合、結果はNULLになります。
NVLは、2つのパラメータ(両方とも式で指定)をとるため、TimesTenではどちらの位置にもNULLは使用できません。式にNULL値が含まれる場合、比較演算子や他の条件はNULLと評価されます。 NULL値を含む比較演算子や条件の評価の詳細は、第4章「検索条件」を参照してください。 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
の両方をpurchasing.orderitems
表の2番目と4番目の列の両方に対応する:dynamicparameter1
で使用します。 そのため、この式には、2番目と4番目の列の両方に使用する2番目のパラメータを使用して、4つの動的パラメータのみを渡す必要があります。
INSERT INTO purchasing.orderitems VALUES (?,:dynamicparameter1, :dynamicparameter2, :dynamicparameter1,?);
この例には、?および:dynamicparameter
の両方を同じSQL文で使用できることと、両方のタイプの動的パラメータを繰り返すことの意味上の違いが示されています。
ビット単位演算子の例を次に示します。
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.