ヘッダーをスキップ

Oracle Rdb SQLリファレンス・マニュアル リリース7.2 E06178-01 |
| 目次 | 索引

戻る | 次へ |

# sql_get_error_text

プログラムで処理するために書式設定されたASCII出力とともにエラー・テキストをプログラムに渡します。

## 形式

>     sql_get_error_text (buf, len, errmsglen)

## 戻り値

> ベクターのテキストからユーザーのバッファへのコピー操作の結果として生じるステータス・コードです。

## 引数

> ### buf

> テキストを受け取るために宣言されるバッファです。

> 値: | テキストを受け取るために宣言されるバッファのアドレス
> データ型: | 文字列
> 受渡しメカニズム: | 参照

> ### len

> テキストを受け取るために宣言されるバッファの長さです。

> 値: | 最初のパラメータによって指し示される文字列の長さ
> データ型: | ロングワード
> 受渡しメカニズム: | 値

> ### errmsglen

> 返されるエラー・メッセージに割り当てられる文字数です。

> 値: | エラー・メッセージに割り当てられる文字数
> データ型: | ロングワード
> 受渡しメカニズム: | 参照

## 説明

> sql_get_error_textルーチンは、プログラムで処理するために書式設定されたASCII出力（FAO）置換とともにエラー・テキストをプログラムに渡すときに使用します。

> sql_get_error_textルーチンを使用するには、 SQLによって渡されるテキストを受け取るためのバッファ（フィールド）をプログラム宣言に含める必要があります。このフィールドは、RDB$LU_STATUS値に関連するメッセージおよびすべての後続のメッセージで想定される文字数を収容するために十分な長さを持つテキスト文字列として宣言します。

## 使用方法

> - このルーチンによって返されるステータス・コードは、メッセージ・ベクターのステータス・コードではありません。

> - 次のリストは、sql_get_error_textルーチンを使用可能な言語と、各言語からのコール方法を示しています。

>   - Ada

>             procedure SQL_GET_ERROR_TEXT(ERROR_BUFFER     : out string;
>                                          ERROR_BUFFER_LEN : in integer;
>                                          ERROR_MSG_LEN    : out integer);
>             pragma INTERFACE(SQL,SQL_GET_ERROR_TEXT);
>             pragma IMPORT_PROCEDURE(internal => SQL_GET_ERROR_TEXT,
>                                     external => "SQL$GET_ERROR_TEXT",
>                                     parameter_types => (string,integer,integer),
>                                     mechanism => (reference,value,reference));

>         --  sql_get_error_text variables.
>             ERROR_BUFFER     : string(1..256);
>             ERROR_BUFFER_LEN : integer := 256;
>             ERROR_MSG_LEN    : integer;

>             sql_get_error_text(error_buffer,error_buffer_len,error_msg_len);

>   - BASIC

>         external sub sql_get_error_text (string by ref, long by value, long by
>         ref)
>         MAP STRING error_buffer = 256
>         DECLARE LONG error_msg_len

>         CALL sql_get_error_text (error_buffer, LEN(error_buffer), error_msg_len)

>   - C

>         char    error_buffer[ n ];
>         int     error_msg_len;

>         sql_get_error_text(error_buffer, sizeof(error_buffer), &error_msg_len);

>   - COBOL

>                 01 GETERRVARS.
>                    02  error-buffer-len         PIC S9(9) COMP VALUE 132.
>                    02  error-msg-len            PIC S9(9) COMP.
>                    02  error-buffer             PIC X(132).

>                 CALL "sql_get_error_text" USING BY REFERENCE error-buffer,
>                                                 BY VALUE error-buffer-len,
>                                                 BY REFERENCE error-msg-len.

>   - FORTRAN

>                 CHARACTER*256   error_buffer
>                 INTEGER         error_msg_len

>                 CALL sql_get_error_text (%REF(error_buffer),
>                 1                        %VAL(LEN(error_buffer)),
>                 2                        %REF(error_msg_len))

>   - Pascal

>         CONST
>              error_buffer_len = 132;

>         VAR
>              error_buffer  : packed array [1..error_buffer_len] of char;
>              error_msg_len : integer;

>         PROCEDURE sql_get_error_text
>                 (%ref err_buffer: packed array [l1..u1:integer] of char;
>                  %immed err_buflen: integer;
>                  var err_length: integer); EXTERNAL;

>         sql_get_error_text (err_buffer := error_buffer,
>                             err_buflen := LENGTH(error_buffer),
>                             err_length := error_msg_len);
>         WRITELN (err_buffer: err_length);

>   - PL/I

>         DECLARE error_buffer            CHARACTER(256),
>                 error_buffer_len        FIXED BINARY(31) INITIAL (256),
>                 error_msg_len           FIXED BINARY(31);

>         CALL sql_get_error_text (error_buffer, error_buffer_len, error_msg_len)

> - sql_get_error_textルーチンにより、後続メッセージをプライマリ・メッセージと区別し、後続メッセージを互いに区別するための改行（CR、LF）文字が返されます。
>   sql_get_error_textルーチンにより、テキストをメッセージ間のデリミタとして受け取るために宣言されたバッファに文字が挿入されます。通常、これらが存在することにより、テキストを端末画面に表示しやすくなります。
>   ただし、プログラムでメッセージを表示するためにForms製品が使用される場合、改行（CR、LF）文字は印刷不可能な文字として解釈されます。
>   次のCOBOLの例は、バッファ内に存在する改行（CR、LF）文字を処理する1つの方法を示しています。

>       *
>       * CRLF is a PIC XX field that contains <cr><lf>.
>       * MSG-TXT-RDBFEL is an array of lines to be displayed for the error message.
>       *
>           STRING CARRIAGE-RET, LINE-FEED DELIMITED BY SIZE INTO CRLF.
>           CALL "sql_get_error_text" USING BY REFERENCE BUFFER,
>                                           BY VALUE BUF_LEN
>                                           BY REFERENCE MSG_LEN.
>           UNSTRING BUFFER DELIMITED BY CRLF INTO MSG-TXT_RDBFEL(1),
>               MSG-TXT_RDBFEL(2), MSG-TXT_RDBFEL(3).

## 関連ルーチン

> - sql$get_error_text

## 例

> 次の例は、Cプログラムで使用されるsql_get_error_textルーチンを示しています。

>     /*
>     *  This function uses the sql_get_error_text routine to display the
>     *  messages returned by various facilities for unexpected error conditions
>     *  that occur.  This program continues after these unexpected errors.
>     */
>     void display_sqlget_message(void)
>        {
>         char  err_buf[ 1024 ];
>         int   err_msg_len;

>         sql_get_error_text(&err_buf, sizeof(err_buf), &err_msg_len);
>         err_buf[err_msg_len] = 0;
>         printf("%s\n",err_buf);
>         return;
>        }