定義
埋め込みSQLは、クライアント アプリケーション内から実行または宣言するSQL文を指します。
- クライアント プログラミング言語文。
- 1つ以上の埋め込みSQL文。
- ホスト言語により異なる、1つ以上の埋め込みSQL宣言セクション。
SQL宣言セクションは、COBOLおよびPL/Iでは任意指定ですが、CではSYSUDTLIBです。
特殊接頭辞のEXEC 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、カーソル
サポートされるホスト言語
- C
- COBOL
- PL/I
埋め込みSQL文の事前処理
クライアント プログラミング言語はSQLを理解しないので、SQLが含まれているソース コードは、プリコンパイラまたはプリプロセッサを使用して事前処理する必要があります。これによってまずSQL言語構成要素をコメント化してから、CLIv2呼び出しに変換します。その後で、それらを適切なC、COBOL、またはPL/Iコンパイラを使用してコンパイルします。
プリプロセッサ2は、Teradata Databaseプリコンパイラおよび実行時SQL文マネージャです。
データを返す文
データを返す文は、1行以上のデータをプログラムに返す埋め込み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アプリケーションの例については、<Teradata® Preprocessor2 for Embedded SQLプログラマ ガイド、B035-2446>を参照してください。
- カーソル宣言については、SQLカーソルを参照してください。
- 他のすべての埋め込みSQL宣言については、静的埋め込みSQL文を参照してください。
カーソルの詳細については、SQLカーソルを参照してください。
- <Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>の「CREATE TRANSFORM」を参照してください。
- UDT列値に対するアクセスと操作に必要な権限の詳細について、<Teradata Vantage™ - SQLデータ制御言語、B035-1149>を参照してください。
ACTIVITY_COUNTの詳細については、ACTIVITY_COUNTを参照してください。