一般に、SQLを実行するCまたはC++外部ストアド プロシージャは、標準的なCLIアプリケーション プログラミング手法に従っています。CLIv2を使用したデータベースとのやりとりについては、<Teradata® CLI V2ワークステーション接続システム、B035-2418>を参照してください。
以下に、CLIv2を使用して直接SQLを実行するCまたはC++外部ストアド プロシージャを定義するための基本的なステップを示します。完全なコード例については、外部ストアド プロシージャのサンプル コードを参照してください。
ステップ | アクション | サンプル コード |
---|---|---|
1 | CLIv2ヘッダー ファイルをsqltypes_td.hヘッダー ファイルの後にインクルードします。 | #define SQL_TEXT Latin_Text #include <sqltypes_td.h> #include <string.h> #include <stdio.h> #include <wchar.h> #include <coptypes.h> #include <coperr.h> #include <parcel.h> #include <dbcarea.h> ... |
2 | CREATE PROCEDURE文またはREPLACE PROCEDURE文で指定したパラメータ受渡しルールに従って、関数を宣言します。 | void ET001_xsp1( VARCHAR_LATIN *A_Name, VARCHAR_LATIN *B_Result, char sqlstate[6]) { ... |
3 | DBCAREAを初期設定します。 | ...
DBCAREA dbcarea;
Int32 result;
char cntxt[4];
char str1[200];
dbcarea.total_len = sizeof(struct DBCAREA);
DBCHINI(&result, cntxt, &dbcarea);
...
|
4 | デフォルト接続の作成オプションを'Y'に変更して、デフォルト接続を確立します。 このステップは、標準的なCLIアプリケーション プログラミングとは異なります。 デフォルト接続は、外部ストアド プロシージャが実行されているセッションにSQLを送付します。 |
... dbcarea.change_opts = 'Y'; dbcarea.use_presence_bits = 'N'; dbcarea.keep_resp = 'N'; dbcarea.loc_mode = 'Y'; dbcarea.var_len_req = 'N'; dbcarea.save_resp_buf = 'N'; dbcarea.two_resp_bufs = 'N'; dbcarea.ret_time = 'N'; dbcarea.wait_for_resp = 'Y'; dbcarea.req_proc_opt = 'E'; dbcarea.req_buf_len = 1024; dbcarea.resp_buf_len = 1024; dbcarea.data_encryption = 'N'; dbcarea.create_default_connection = 'Y'; dbcarea.func = DBFCON; DBCHCL(&result, cntxt, &dbcarea); ... |
5 | SQLリクエストを開始し、応答を取得して、リクエストを終了します。 (必要に応じてこのステップを繰り返します) |
... memset(str1, ' ', 100); sprintf(str1, "DELETE USER %s;", A_Name); dbcarea.func = DBFIRQ; dbcarea.req_ptr = str1; dbcarea.req_len = strlen(str1); DBCHCL(&result, cntxt, &dbcarea); if (result != EM_OK) { strcpy(sqlstate, "U0007"); return; } ... dbcarea.func = DBFFET; DBCHCL(&result, cntxt, &dbcarea); if (result != EM_OK) { strcpy(sqlstate, "U0008"); return; } ... dbcarea.func = DBFERQ; DBCHCL(&result, cntxt, &dbcarea); if (result != EM_OK) { strcpy(sqlstate, "U0009"); return; } ... |
6 | INOUT引数またはOUT引数を設定します。 割り当てられたメモリの解放、他のシステムへの接続の終了などのクリーンアップを実行します。 戻ります。 |
... strcpy((char *)B_Result, "User deleted."); } |