sql_get_message_vector (addr, index)
戻り値はありません。
addr
リクエストされたベクター要素が書き込まれる変数のアドレスです。
値: ベクター要素を受け取るために宣言される変数のアドレス データ型: ロングワード(32ビット) 受渡しメカニズム: 参照
index
返されるベクター要素の索引値です。
値: 1以上20以下の値 データ型: 符号なしロングワード 受渡しメカニズム: 値
次の表は、索引値と、ベクター要素および各ベクター要素に含まれる情報にこれらの索引値をマップする方法を示しています。
索引値 返される情報 1 ベクター内の引数の数 2 最後のSQL文の1次ステータス・コード 3 プライマリ・メッセージに対するFAO引数の数 4〜20 後続メッセージの戻りステータス(存在する場合)
sql_get_message_vectorルーチンを使用して、RDB$MESSAGE_VECTOR配列から情報を取得します。この配列は、SQL文の実行ステータスに関する情報を提供します。sql_get_message_vectorルーチンの索引2により、最後のSQL文の1次ステータス・コードが返されます。この索引は、SQLCODEステータス・パラメータに相当します。ANSI/ISO SQL規格には、sql_get_message_vectorルーチンやRDB$MESSAGE_VECTOR配列は含まれません。この規格に準拠するアプリケーション・プログラムの場合は、SQLCODEステータス・パラメータまたはSQLSTATEステータス・パラメータを使用します。また、Oracle Rdbの将来のバージョンでは、特定の条件下で返されるステータス値が変更される可能性があります。
メッセージ・ベクターに格納されるステータス値は、SQLCODEステータス・パラメータまたはSQLSTATEステータス・パラメータの補足情報用です。SQLCODEまたはSQLSTATEによって提供される情報があいまいで、アプリケーションでエラー条件を処理するためにより明確なエラー・コードが必要である場合は、sql_get_message_vectorルーチンを使用します。
表5-2は、sql_message_vectorによって返される索引とRDB$MESSAGE_VECTORのフィールドの関係を示しています。
表5-2 sql_message_vectorとRDB$MESSAGE_VECTORの関係 sql_message_vectorの索引 RDB$MESSAGE_VECTORのフィールド 索引1 RDB$LU_NUM_ARGUMENTS 索引2 RDB$LU_STATUS 索引3 RDB$LU_ARGUMENTS 索引4〜20 後続メッセージの戻りステータス(存在する場合)
- 次のリストは、sql_get_message_vectorルーチンを使用可能な言語と、各言語からのコール方法を示しています。
- Ada
procedure sql_get_message_vector (buffer_name : out ; index: in ); pragma INTERFACE (NONADA, sql_get_message_vector): pragma IMPORT_PROCEDURE (INTERNAL => sql_get_message_vector, EXTERNAL => "sql_get_message_vector", PARAMETER_TYPES => (integer,integer) MECHANISM =>(REFERENCE, VALUE));
- BASIC
external sub sql_get_message_vector(long by ref, long by value) call sql_get_message_vector(buffer_name, index)
- C
int buffer_name; int index; sql_get_message_vector(&buffer_name, index);
引数をintデータ型として宣言すると、すべてのプラットフォームで正しいデータ型が使用されます。- COBOL
CALL 'sql_get_message_vector' USING BY REFERENCE buffer-name BY VALUE index
- FORTRAN
CALL sql_get_message_vector (buffer-name, index)
- Pascal
var buffer, index : integer; procedure sql_get_message_vector ( var buffer: integer; index : [immediate,readonly] integer ); external; sql_get_message_vector (buffer, index);
- PL/I
DCL sql_get_message_vector ENTRY (ANY, FIXED(31) BIN); CALL sql_get_message_vector (REFERENCE(buffer-name),index)
なし。
次の例は、SQLモジュールをコールし、sql_get_message_vectorを使用してSQL文のステータスを返すCプログラムの抜粋です。
. . . /* Error handler, using sql_get_message_vector. */ get_msgvec( ) { int index; int status_code; int arg_cnt; /* Declare the literal for contraint violation status. */ int RDB$_INTEG_FAIL; /* Get the message vector argument count. */ index = 1; sql_get_message_vector(&arg_cnt, index); /* Get the status code. */ index = 2; sql_get_message_vector(&status_code, index); if (status_code == RDB$_INTEG_FAIL) printf("Constraint violation. "); printf("You are trying to insert a department code\n"); printf("which already exists in the table."); exit(1); /* You can also check for the follow-on arguments, if the arg_cnt is greater * than 1. */ } main( ) { . . . insert_data (&SQLCODE, department_code, department_name, manager_id); if (SQLCODE != 0) get_msgvec(); }