UPDATE (定位置形式) - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLストアド プロシージャおよび埋め込みSQL

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/xqq1557098602407.ditamap
dita:ditavalPath
ja-JP/xqq1557098602407.ditaval
dita:id
B035-1148
Product Category
Software
Teradata Vantage

目的

もっとも最近に取り出されたカーソル行を更新します。

呼び出し

実行可能形式。

ストアド プロシージャおよび埋め込みSQL。

構文

{ UPDATE | UPD } table_name [ alias_name ]
  SET set_spec [,...]
  WHERE CURRENT OF cursor_name [;]
set_spec
column_name = expression
table_name
更新されるテーブルの名前。
alias_name
テーブル名の別名。
相関名は範囲変数ともいいます。
column_name = expression
列名、および更新後の値。
ホスト変数をSET句で使用するときは、その直前にコロン記号が常に必要となります。
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>を参照してください。