目的
もっとも最近に取り出されたカーソル行を更新します。
呼び出し
実行可能形式。
ストアド プロシージャおよび埋め込みSQL。
構文
- table_name
- 更新されるテーブルの名前。
- correlation_name
- テーブル名の別名。
- column_name = expression
- 列名、および更新後の値。
- cursor_name
- 更新する行を指示する、更新可能なカーソルの名前。
ANSI準拠
定位置形式のUPDATEは、ANSI/ISO SQL:2011に準拠しています。
許可
更新するテーブルまたは列に対するUPDATE権限が必要です。
UPDATEを実行する場合に、オブジェクトへのREADアクセスも必要であれば、アクセスするオブジェクトに対するSELECT権限を持っていなければなりません。
例えば、以下の文では、WHERE条件のためにREADアクセスが必要です。
UPDATE table_1 SET field_1=1 WHERE field_1<0;
同様に、以下の文では、field_1の新しい値を計算するためにtable_1の値をfield_1から読み取る必要があるため、READアクセスが必要です。
UPDATE table_1 SET field_1 = field_1 + 1;
UPDATE操作は、更新されているテーブルまたは行に対するWRITEロックを設定します。
UPDATE文に対する成功応答内のアクティビティ カウントには、更新された行の総数が反映されます。更新される行がなければ、アクティビティ カウントはゼロです。
相関サブクエリーを使ったUPDATE
UPDATE文での相関サブクエリーの使用については、<Teradata Vantage™ SQLデータ操作言語、B035-1146>の「相関サブクエリーおよびUPDATE文」を参照してください。
ラージ オブジェクトおよびUPDATE
切り捨てられたLOB更新の動作は、ANSIとTeradataセッション モードとでは異なります。以下の表は、切り捨て動作での相違点を説明しています。
セッション モード | 挿入時に非埋め込みバイトが切り捨てられた場合の動作 |
---|---|
ANSI | 例外条件が発生します。 UPDATEが失敗します。 |
Teradata | 例外条件は発生しません。 UPDATEは成功します。切り捨てられたLOBが格納されます。 |
GENERATED ALWAYS識別列およびPARTITIONの更新
- GENERATED ALWAYS識別列
- PARTITION
GENERATED BY DEFAULT識別列は更新できます。指定した値は、識別列パラメータの制約は受けませんが、列にCHECK制約が定義されている場合その制約を受けます。
ミュテーターSET句のサポート
埋め込みSQLではUDTがサポートされないため、位置指定された形式のUPDATEではミュテーターSET句はサポートされません。
ANSIセッション モードのUPDATEのルール
- WHERE CURRENT OF句を使用すると、UPDATE文は、WHERE CURRENT OF cursor_nameというカーソルによって現在指示されているデータ行に対して処理を行なうことができる。このようなカーソルのことを更新可能であるという。
- cursor_nameを宣言する際、行を更新または削除する意図を指定する必要はない。
- cursor_nameの現在取り出されている行に対して複数の更新を実行すること、およびcursor_nameの現在取り出されている行を削除した後に更新を実行することは、いずれも有効である。
PPIテーブルのパーティション列を更新する際のルール
パーティション プライマリ インデックスのパーティション列を更新する場合、パーティション列の更新はパーティション式が(値がINTEGERでなければINTEGERにキャストした後に)1~65535の範囲の非NULL値を生成できる範囲でなければなりません。
DEFAULT関数の使用に関するルール
- DEFAULT関数は、リレーション列を名前で識別する単一の引数を取ります。この関数は、列の現行デフォルト値に等しい値と評価されます。列のデフォルト値が現行の組み込みシステム関数として指定される場合、DEFAULT関数は、文の実行時にシステム変数の現行値と評価されます。
この結果として、DEFAULT関数のデータ型は、デフォルトがNULLでない場合、デフォルトとして指定される定数または組み込み関数のデータ型になります。デフォルトがNULLの場合、DEFAULT関数のデータ型は、デフォルトのリクエスト対象である列または式のデータ型と同じになります。
- DEFAULT関数には 2 つの形式があります。DEFAULT関数はDEFAULTまたはDEFAULT (column_name)sとして指定することができます。列名が指定されていない場合、システムは、コンテキストに基づいて列を派生させます。列のコンテキストを派生させることができない場合、リクエストはアボートし、エラーが要求元に戻されます。
- SET句の式として、列名の引数を指定しないDEFAULT関数を指定することができます。DEFAULT関数の列名は、column_nameとして指定された列です。DEFAULT関数は、column_nameとして指定された列のデフォルト値と評価されます。
- 式の一部として、列名の引数を指定しないDEFAULT関数を指定することはできません。代わりに、それ自身を指定する必要があります。このルールは、ANSI/ISO SQL:2011仕様で定義されています。
- ソース式に、列名の引数を指定しないDEFAULT関数を指定することができます。DEFAULT関数は、DEFAULT関数への入力引数として指定された列のデフォルト値と評価されます。
たとえば、DEFAULT(col2)はcol2のデフォルト値と評価されます。これは、ANSI/ISO SQL:2011仕様に対するTeradataの拡張機能です。
- UPDATE式の任意の場所に、列名の引数を指定したDEFAULT関数を指定できます。これは、ANSI/ISO SQL:2011仕様に対するTeradataの拡張機能です。
- 列にデフォルト値が明示的に関連付けられていない場合、その列がその引数として指定されていると、DEFAULT関数はNULLと評価されます。
例: カーソルを使用したテーブルの更新
この例では、テーブルの更新に使用されるカーソルの名前はcursor_01です。
EXEC SQL UPDATE table_1 SET text = :text, K = :I + 1000 WHERE CURRENT OF cursor_01;
関連トピック
- ミュテーターSET句の詳細については、<Teradata Vantage™ SQLデータ操作言語、B035-1146>の「UPDATE」を参照してください。
- DEFAULT関数の全般的な情報については、<Teradata Vantage™ SQL関数、式および述部、B035-1145>を参照してください。