SQLプロシージャでのSQL複文リクエスト サポート - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
ft:locale
ja-JP
ft:lastEdition
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage

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文は、次のリストの項目だけです。

  • ABORT
  • BEGIN TRANSACTION
  • COMMIT
  • DELETE
  • END TRANSACTION
  • INSERT
  • MERGE
  • ROLLBACK
  • SELECT INTO

    DBC.SysExecSQLプロシージャを使用して作成された動的SQLの、行を返すSELECTリクエストまたはSELECT INTOリクエストは指定できません。

  • UPDATE
セッションのモード 複数のINSERT … SELECT文の動作
ANSI リクエスト内の最後の文がCOMMIT文である場合、高速パスを使用します。

DELETE ALL文は、複文リクエストの次の、または最後の文がCOMMIT文の場合、高速パスを使用します。

同じことがPPIパーティション全体を削除する場合にも当てはまります。

Teradata 複文リクエストが暗黙的トランザクションかまたはEND TRANSACTION文で終了する明示的トランザクションである場合、高速パスを使用します。
DELETE ALL文が次のいずれかの場合、高速パスを使用します。
  • 暗黙的なリクエストの最後の文。
  • END TRANSACTION文で終了する明示的なトランザクション。

同じことがPPIパーティション全体を削除する場合にも当てはまります。

動的SQL機能を使用すると、プロシージャ アプリケーション内にアドホックSQL文を構築できます。システムは、次のいずれかの方法でリクエストを作成します。