式の指定
式には、SQL処理で使用する値を指定します。
式は、算術演算子、比較演算子、文字列またはバイナリ演算子、ビット演算子、または「関数」で説明するいずれかの関数で連結された1つまたは複数のプライマリで構成できます。プライマリは、SQL構文に示された項目から算出される、符号付きまたは符号なしの値です。
SQL構文
{ColumnName | ROWID | {? | :DynamicParameter} |
Function | Constant | (Expression)}
または
[[+ |-] {ColumnName | SYSDATE | TT_SYSDATE|GETDATE() |
{? | :DynamicParameter} | Function |
Constant | {~ | + | -} Expression}]
[...]
または
Expression1[& | | | ^ | + | / | * | - ]Expression2
または
Expression1| |Expression2
または
Expression| 構成要素 | 説明 |
|---|---|
|
|
単項プラスと単項マイナス 単項マイナスはプライマリの符号を変更します。デフォルトの設定では、符号は変更しません。 |
|
|
値を取得する列の名前 詳細は、「名前、ネームスペースおよびパラメータ」を参照してください。 |
|
|
表に保存される各行の一意のID ROWID値は |
|
|
動的パラメータのプレースホルダ 動的パラメータの値は、実行時に設定されます。 |
|
|
計算された値 詳細は、「関数」を参照してください。 |
|
|
特定の値 詳細は、「定数」を参照してください。 |
|
|
カッコで囲まれた任意の式 |
|
|
指定された式
|
|
|
2つのプライマリを乗算します |
|
|
2つのプライマリを除算します |
|
|
2つのプライマリを加算します |
|
|
2つのプライマリを減算します |
|
|
2つのオペランドのビット単位の
|
|
|
2つのオペランドのビット単位の
|
|
|
オペランドのビット単位の
|
|
|
2つのオペランドの排他
|
|
|
連結演算子 両方の式が文字列の場合に、 |
説明
-
数値間の計算には、算術演算子を使用できます。詳細は、「数値データ型」を参照してください。
-
日時値および時間隔型でも、算術演算子を使用できます。日時式の結果は、日時データ型または時間隔データ型です。
-
文字列値に算術演算子は使用できません。
-
式の各要素は、次の順序で評価されます。
-
カッコ内の関数および式。
-
単項プラスと単項マイナス。
-
*および/の演算 -
+および–の演算 -
優先順位が同じ要素については、左から右の順に評価されます。
-
-
式をカッコで囲み、評価の順序を制御できます。次に例を示します。
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.