SQLCAには70文字までのエラー・メッセージを格納できます。71文字以上の(またはネストされた)エラー・メッセージ全体を取得するには、sqlglm()
関数を使用する必要があります。構文は次のとおりです
void sqlglm(unsigned char *message_buffer, size_t *buffer_size, size_t *message_length);
説明:
構文 | 説明 |
---|---|
message_buffer |
エラー・メッセージを格納するためのテキスト・バッファです(Oracleはバッファの最後まで空白文字で埋め込みます)。 |
buffer_size |
バッファの最大サイズをバイト数で示したスカラー変数です。 |
message_length |
Oracleによって格納されたエラー・メッセージの切り捨てられていない場合の、実際の長さを示すスカラー変数です。 |
注意:
sqlglm()
関数の最後の2つの引数の型は一般的なsize_t
ポインタとして示してあります。ただし、プラットフォームによっては型が異なることがあります。たとえば、多くのUNIXワークステーション・ポートでは、unsigned int *
になります。
これらのパラメータのデータ型を判別するには、システムの標準インクルード・ディレクトリにあるsqlcpr.h
ファイルをチェックしてください。
Oracleエラー・メッセージの最大長は、エラー・コード、ネストされたメッセージ、表や列の名前など、メッセージの挿入部分を含めて512文字です。sqlglm
によって戻されるエラー・メッセージの最大長は、buffer_sizeに指定した値によって決まります。
次の例では、sqlglm
をコールして、200文字以内の長さのエラー・メッセージを取得します。
EXEC SQL WHENEVER SQLERROR DO sql_error(); ... /* other statements */ ... sql_error() { char msg[200]; size_t buf_len, msg_len; buf_len = sizeof (msg); sqlglm(msg, &buf_len, &msg_len); /* note use of pointers */ if (msg_len > buf_len) msg_len = buf_len; printf("%.*s\n\n", msg_len, msg); exit(1); }
sqlglm()
は、SQLエラーが発生したときにのみコールできます。sqlglmをコールする前に、SQLCODE (またはsqlca.sqlcode)の値が0(ゼロ)でないことを必ず確認してください。SQLCODEが0(ゼロ)のときにsqlglm()
をコールすると、以前のSQL文に対応したメッセージが取得されることになります。
注意:
複数のランタイム・コンテキストが使用される場合は、コンテキストを持つバージョンのsqlglmt()を使用して、適切なエラー・メッセージを取得してください。
関連項目: