ターゲット行パーティション テーブルのupsert形式のUPDATE文のUPDATEコンポーネントに対して以下のルールが適用されます。
ターゲット テーブルにはプライマリ インデックスがなければならず、行パーティション化できますが、列パーティション化はできません。
パーティション式の結果が1とそのレベルに定義されたパーティション数の間の値にならないように、行パーティションを使用するテーブルのパーティション列を更新するUPDATEリクエストを送信することはできません。
アップサート形式のUPDATEリクエストのINSERTコンポーネントには、UPDATEコンポーネントに指定するのと同じ組み合わせパーティション式のパーティションを指定する必要があります。
アップサート形式のUPDATEリクエストのWHERE句には、パーティション列の値を指定する必要があります。
そのパーティション列の値を変更することもできません。変更した場合、システムはリクエストをアボートし、要求元にエラー メッセージを返します。
システム派生列PARTITIONおよびPARTITION#L1~PARTITION#L62を更新できません。
パーティション式の評価中にゼロ除算エラーなどの式評価エラーが発生する可能性があります。システムは、エラー発生時に実行されているセッション モードに応じてそのエラーに応答します。
セッション モード | 式評価エラーがロールバックする作業単位 |
---|---|
ANSI | アボートされたリクエストを含んでいるリクエスト |
Teradata | アボートされたリクエストを含むトランザクション。 |
式のエラーを防ぐために、パーティション式の設計時には注意が必要です。
INSERT句は、UPDATE句と同じパーティション列値を指定する必要があります。これは、UPDATE条件が期間境界関数に基づいた条件を指定する際にも適用されます。
パーティション式の一部としてPeriod列を指定すると、そのテーブルのupsertリクエストの列には、等価条件のみを指定できます。アップサート リクエストは、テーブルのパーティション式に指定されているPeriod列に対して不等条件を指定できません。
ただし、アップサート リクエストは、その列に対する等価条件と不等条件に、パーティション式の一部としては定義されていないPeriod列を指定できます。
アップサート リクエスト内でPeriod列を指定する場合、等価条件内の条件でなければなりません。
ターゲット テーブルのパーティション式で期間境界関数を指定すると、その境界関数の等価条件はパーティション境界マッチング条件として扱われます。
テーブルのパーティション式でBEGIN境界とEND境界を指定すると、両方の境界の等価条件のみがパーティション境界マッチング条件として処理されます。これは、単一パーティションになる必要があります。
条件IS UNTIL_CHANGEDおよびIS UNTIL_CLOSEDは、END境界関数のみに対する等価条件として扱います。