ヘッダーをスキップ

Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド リリース6.0 B25770-01 |
| 目次 | 索引

前へ | 次へ |

## 式の指定

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

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

SQL構文
{ColumnName | ROWID | {? | :DynamicParameter} |
AggregateFunction | Constant | (Expression) }

または

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

[...]

または

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

または

Expression1 | | Expression2

または

Expression

+, - | 単項プラスと単項マイナス。単項マイナスはプライマリの符号を変更します。デフォルトの設定では、符号は変更しません。
ColumnName | 値を取得する列の名前。列名については「名前」を参照してください。
ROWID | 表に保存される各行には、ROWIDと呼ばれる一意のIDが割り当てられます。ROWIDのデータ型はBINARY(16)です。ROWIDの値は、ROWIDという名前の擬似列から取得されます。
? :DynamicParameter | 動的パラメータのプレースホルダ。 動的パラメータの値は、実行時に設定されます。
AggregateFunction | 計算された値。「集計関数」を参照してください。
Constant | 特定の値。「定数」を参照してください。
(Expression) | かっこで囲まれた式。
Expression1 Expression2 | Expression1およびExpression2は、ビット単位演算子とともに使用すると、整数型またはバイナリ型にできます。両方の式のデータ型には互換性が必要です。「データ型」を参照してください。
* | 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」も参照してください。

説明

- 数値（DOUBLE、REAL、DECIMAL、NUMERIC、BIGINT、INTEGER、SMALLINT、TINYINTなどのデータ型の値）間の計算には、算術演算子を使用できます。「算術演算での数値型」を参照してください。
- 日時値および時間隔型でも、算術演算子を使用できます。日時式の結果は、日時型または時間隔型です。「算術演算における日時型および時間隔型」を参照してください。
- 文字列値に算術演算子は使用できません。
- 式の各要素は、次の順序で評価されます。

- カッコ内の集計関数および式。
- 単項プラスと単項マイナス。
- *および/処理。
- +および-処理。
- 優先順位が同じ要素については、左から右の順に評価されます。

- 式をカッコで囲み、評価の順序を制御できます。たとえば次のようにできます。

10 * 2 - 1 = 19 のかわりに 10 * (2 - 1) = 10 とします。

- 評価される式によっては、データ型の変換、切捨て、アンダーフロー、オーバーフローが発生する場合があります。「データ型」を参照してください。
- 数値式のいずれかのオペランドがNULLの場合、結果はNULLになります。
- NVLは、2つのパラメータ（両方とも式で指定）をとるため、TimesTenではどちらの位置にもNULLは使用できません。式にNULL値が含まれる場合、比較演算子や他の条件はNULLと評価されます。NULL値を含む比較演算子や条件の評価の詳細は、「検索条件」を参照してください。NULLを挿入することはできますが、通常、INSERTは特定の値のみをとり、一般的な式はとりません。
- 条件に、別々のROWID等式を指定するか、またはINを使用すると、問合せオプティマイザと実行エンジンで複数のROWID検索が可能です。たとえば、複数の高速ROWID検索は、次のように実行します。

    WHERE ROWID = :v1 OR ROWID = :v2

- あるいは、次のように指定します。

    WHERE ROWID IN (:v1, :v2)

- 次の例に示すとおり、?または:DynamicParameterを、式の中で動的パラメータとして使用できます。

例

次は、動的パラメータの使用例を示します。

##### 例11.1

SELECT文のWHERE句:

       SELECT *
       FROM Purchasing.Orders
       WHERE PartNumber = ?
       AND OrderNumber > ?
       ORDER BY OrderNumber

##### 例11.2

UPDATE文のWHERE句およびSET句:

       UPDATE Purchasing.Parts
       SET SalesPrice = :DynamicParameter1
       WHERE PartNumber = :DynamicParameter2

##### 例11.3

DELETE文のWHERE句:

       DELETE FROM Purchasing.OrderItems
       WHERE ItemNumber BETWEEN ? AND ?

##### 例11.4

INSERT文のVALUES句です。この例では、?と:DynamicParameterの両方を、Purchasing.OrderItems表の2番目と4番目の列の両方に対応する:DynamicParameter1で使用します。そのため、この式には、2番目と4番目の列の両方に使用する2番目のパラメータを使用して、4つの動的パラメータのみを渡す必要があります。

       INSERT INTO Purchasing.OrderItems VALUES
          (?,:DynamicParameter1,
           :DynamicParameter2,
           :DynamicParameter1,?)

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