ANSIモードかまたはTeradataセッション モードのいずれかで作成されるプロシージャでは、プロシージャ本体内に標準的なTeradata複文リクエストを指定できます。その機能には、BTEQ、組み込みSQL、またはその他の標準的なSQL文エントリパスによって実行される標準的な複文リクエストと同じ制限があります(<Teradata Vantage™ - SQLの基本、B035-1141>を参照)。その他のSQL複文リクエストと同様、システムは並行してAMPに対してプロシージャ複文リクエストを送信します。
複文リクエスト内に含まれる文は、INSERT、UPDATE、およびDELETEなどのDML文のみに制限されます。ブロック内にSQL文以外のタイプを指定することはできません。
同じ複文リクエスト内にSELECT AND CONSUME文を組み込んだり、明示的なトランザクションを同じキュー テーブルに対して動作するDELETE、MERGE、またはUPDATE文として組み込むことはできません。
複文リクエスト ブロック内のどの文にもエラーがない場合、システムは活動結果を出しません。
複数の文が完了条件を指定する場合、システムはまず条件コードのみを返しますが、これは例外ハンドラーによって処理されるブロック内の唯一の文でもあります。
リクエストがアボートする場合、システムはその中のすべてのSQL文をロールバックし、例外ハンドラーが指定されている場合は例外ハンドラに制御を渡します。例外ハンドラーが指定されていない場合、プロシージャはエラーで終了します。
複文ブロックは、セミコロンで区切られた複数の個々のDML文か、または1つのDML文によって構成されます。それ以外のタイプの文はすべて無効です。
プロシージャの複文リクエストの一部として送信できるSQL文は、次のリストの項目だけです。
|
|
セッションのモード | 複数のINSERT … SELECT文の動作 |
---|---|
ANSI | リクエスト内の最後の文がCOMMIT文である場合、高速パスを使用します。 DELETE ALL文は、複文リクエストの次の、または最後の文がCOMMIT文の場合、高速パスを使用します。 同じことがPPIパーティション全体を削除する場合にも当てはまります。 |
Teradata | 複文リクエストが暗黙的トランザクションかまたはEND TRANSACTION文で終了する明示的トランザクションである場合、高速パスを使用します。 DELETE ALL文が次のいずれかの場合、高速パスを使用します。
同じことがPPIパーティション全体を削除する場合にも当てはまります。 |
- SQL PREPARE文の使用
<SQLプロシージャでのPREPARE文の使用に関するルール>および<Teradata Vantage™ - SQLストアド プロシージャおよび埋め込みSQL、B035-1148>を参照してください。
この形式で作成された動的SQLは、行を返すSELECT文およびSELECT INTO文を指定できます。動的結果セットの詳細と動的結果セットのルールと制限を参照してください。
- DBC.SysExecSQLプロシージャを使用すると、セミコロンで区切られたいくつかのSQL DML文が呼び出されます。
この方法で複数の文を作成すると、システムはセット全体を1つのリクエストとして実行します。
動的SQLリクエスト内で有効なSQL文のセットは、静的SQLで有効なセットと同じです。SQLプロシージャでサポートされるDDL文、SQLプロシージャでサポートされないDML文、およびSQLプロシージャでサポートされるDCL文を参照してください。
この形式で作成された動的SQLは、行を返すSELECT文およびSELECT INTO文を指定できません。
複文リクエストごとに指定できる動的リクエストは1つのみです。