16.20 - 埋め込みSQLの概要 - Teradata Vantage NewSQL Engine

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

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1148-162K-JPN

定義

埋め込みSQLは、クライアント アプリケーション内から実行または宣言するSQL文を指します。

埋め込みTeradata SQLクライアント プログラムは、次のもので構成されます。
  • クライアント プログラミング言語文。
  • 1つ以上の埋め込みSQL文。
  • ホスト言語により異なる、1つ以上の埋め込みSQL宣言セクション。

    SQL宣言セクションは、COBOLおよびPL/Iでは任意指定ですが、CではSYSUDTLIBです。

特殊接頭辞のEXEC SQLにより、アプリケーション プログラムに埋め込まれたSQL言語文と、ホスト プログラミング言語が区別されます。

埋込みSQL文の場合、文の連結および終了、変数名の構成などに関係した、ホスト プログラミング言語のルールに従わなければなりません。これらのルールを別にすれば、埋め込みSQLはホスト言語に依存しません。

埋め込みSQL用の特殊SQL文

埋め込みSQLには、言語の対話的使用がサポートされていない多くのSQL言語構成が必要です。

ただし、いくつかの例外を除いて、埋め込みSQLアプリケーションで対話的に実行できるほとんどのSQL文が使用できます。例外には、次のようなものがあります。
  • 非ANSI Teradata拡張機能のECHOおよびUSING
  • CREATE FUNCTIONおよびREPLACE FUNCTION
  • 次のクエリー ロギング文: BEGIN QUERY LOGGING、END QUERY LOGGING、FLUSH QUERY LOGGING、およびREPLACE QUERY LOGGING
埋め込みSQLには、次のSQLコンポーネントが含まれます。
  • 直接、または対話的なSQL
  • ホスト変数サポートを提供する拡張機能
  • 埋め込みSQLをサポートする次の構成をサポートする文: 宣言、動的SQL、カーソル

サポートされるホスト言語

  • C
  • COBOL
  • PL/I

埋め込みSQL文の事前処理

クライアント プログラミング言語はSQLを理解しないので、SQLが含まれているソース コードは、プリコンパイラまたはプリプロセッサを使用して事前処理する必要があります。これによってまずSQL言語構成要素をコメント化してから、CLIv2呼び出しに変換します。その後で、それらを適切なC、COBOL、またはPL/Iコンパイラを使用してコンパイルします。

プリプロセッサ2は、Teradata Databaseプリコンパイラおよび実行時SQL文マネージャです。

データを返す文

データを返す文は、1行以上のデータをプログラムに返す埋め込みSQL文です。

データを返すSQL文には、次のものがあります。
  • CHECKPOINT
  • COMMENT (コメントを返す形式)
  • EXPLAIN
  • HELP
  • SELECT
  • SHOW

それぞれのデータを返す文は、返すデータを入れるホスト出力変数を指定しなければなりません。

条件 結果
1行だけのデータを返す INTO句と、ホスト変数を指定する文とを使用します。
複数の行を返す 選択カーソルを使用し、INTO句は指定しないでください。
データを返す文を動的に実行する 予期する応答行の数に関係なく、動的カーソルを定義SYSUDTLIB

ルール

  • すべての埋め込みSQL文には、接頭辞のEXEC SQLが必要です。
  • すべての埋め込みSQL文は、終了していなければなりません。終了記号は、クライアント アプリケーション言語に応じて異なります。
言語 SQL終了子
COBOL END-EXEC
C ;
PL/I
  • すべての実行可能なSQL文は、実行可能なクライアント アプリケーション言語文が表記できるところではどこでも表記できます。
  • 埋め込みSQL文は、ホスト変数を参照することができます。
  • ホスト変数は、BEGIN DECLARE SECTION文とEND DECLARE SECTION文の間で定義しなければなりません。
  • ホスト変数は、それを参照するどのSQL文よりも先に定義しなければなりません。
  • すべてのホスト変数は、そのターゲットの列と同じドメインから引いてきたものにする必要があります。
  • UDTはいかなる形式の埋め込みSQLでも明示的にはサポートされていません。

    ただし、埋め込みSQLアプリケーションでも、UDTで適切なtosql変換またはfromsql変換が定義されていれば、UDTを参照するSQL文が使用できます。

    少なくとも、アプリケーションからアクセスするUDT列に対するUDTUSAGE権限が必要です。

    さらに、アプリケーションはUDTデータをその外部(UDTではない)データ型の形式で送受信しなければなりません。

  • ホスト変数と列には同じ名前を付けることができます。
  • すべての埋め込みSQLプログラムは、Teradata Databaseとクライアント アプリケーションとの間でステータスを通信するために、SQLSTATEホスト変数とSQLCODEホスト変数のどちらか、または両方を含んでいなければなりません。

    SQLCODEの使用は、ANSI/ISO SQL-92規格では推奨されず、ANSI/ISO SQL-99規格ではサポートされなくなりました。このため、ANSIモードで実行予定のアプリケーションではSQLSTATE変数を使用する必要があります。

    ACTIVITY_COUNT結果コード変数を埋め込みSQLアプリケーションに組み込むと便利なこともあります。

  • 埋め込みSQL文の実行後には、必ずSQLCODEまたはSQLSTATE (あるいはその両方)の値を検査する必要があります。

関連トピック

カーソルの選択方法の詳細については、SQLカーソルを参照してください。

埋め込みSQLの詳細について、以下を参照してください。
  • 静的埋め込みSQL文
  • 動的埋め込みSQL文
  • サポートされているクライアント言語で記述された埋め込みSQLアプリケーションの例については、<Teradata® Preprocessor2埋め込みSQLプログラマ ガイド、B035-2446>を参照してください。
宣言の詳細について、以下を参照してください。

カーソルの詳細については、SQLカーソルを参照してください。

UDTの詳細について、以下を参照してください。
  • <Teradata Vantage™ SQLデータ定義言語の構文規則および例、B035-1144>の「CREATE TRANSFORM」を参照してください。
  • UDT列値に対するアクセスと操作に必要な権限の詳細について、<Teradata Vantage™ SQLデータ制御言語、B035-1149>を参照してください。
SQLCODEおよびSQLSTATEの詳細については、以下を参照してください。
  • SQLSTATE
  • SQLCODE
  • SQLCODEおよびSQLSTATEの値の検査についての詳細は、WHENEVERを参照してください。

ACTIVITY_COUNTの詳細については、ACTIVITY_COUNTを参照してください。