ヘッダーをスキップ

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

戻る | 次へ |

# sql_signal

## 形式

>     sql_signal ()

## 戻り値

> 戻り値はありません。

## 引数

> なし。

## 説明

> sql_signalルーチンは、プログラムの条件ハンドラにSQL文の実行時に発生したエラーのシグナルを発行します。プログラムに条件ハンドラが含まれない場合、エラーが発生すると、sql_routineにより、エラー・メッセージが出力され、プログラムが終了されます。

> ホスト言語コンパイラでシグナル・メカニズムを提供していない場合、独自の条件ハンドラを用意する必要があります。

## 使用方法

> - 名前sql$signalを使用して、sql_signalと同じようにこのルーチンを起動できます。

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

>   - Ada

>         procedure SQL_SIGNAL
>         pragma INTERFACE (NONADA,SQL_SIGNAL)
>         pragma IMPORT_PROCEDURE (SQL_SIGNAL,"sql_signal")

>         sql_signal;

>     エラーのシグナルを発行するコールの使用の詳細は、Adaのドキュメントを参照してください。

>   - BASIC

>         CALL sql_signal();

>     条件ハンドラの作成の詳細は、BASICのドキュメントを参照してください。

>   - C

>         sql_signal();

>     C for OpenVMSには、プログラムの条件ハンドラを作成するために使用するランタイム・ライブラリ・ルーチンであるVAXC$ESTABLISHが用意されています。条件ハンドラの作成の詳細は、Cのドキュメントを参照してください。

>   - COBOL

>         CALL "sql_signal"

>     COBOL for OpenVMSは、条件ハンドラを自動的に設定する言語です。このため、別の条件ハンドラを設定するためのルーチンがコールされていないかぎり、sql_signalをコールすると、COBOLプログラムによりメッセージが表示され、COBOL条件ハンドラの制御下でプログラムの実行が続行されます。COBOL条件ハンドラの詳細は、COBOLのドキュメントを参照してください。

>   - FORTRAN

>         CALL sql_signal

>     FORTRAN for OpenVMSは、LIB$ESTABLISHをコールしてプログラムの条件ハンドラを作成するか、またはOpenVMS条件ハンドラに依存する言語です。プログラムの条件ハンドラの作成の詳細は、FORTRANのドキュメントを参照してください。

>   - Pascal
>     Pascalプログラムでは、このルーチンをコールする前にsql_signalを外部プロシージャとして宣言する必要があります。

>         procedure sql_signal; external;
>         sql_signal;

>     Pascalには、OpenVMS条件ハンドラを設定するために使用可能なルーチンが用意されています。プログラムの条件ハンドラの作成の詳細は、Pascalのドキュメントを参照してください。

>   - PL/I
>     PL/Iプログラムでは、このルーチンをコールする前にsql_signalを外部エントリとして宣言する必要があります。

>         DCL sql_signal EXTERNAL ENTRY;
>         CALL sql_signal;

>     PL/Iは、プログラムで条件ハンドラを自動的に設定する言語です。このため、別の条件ハンドラを設定するためのルーチンがコールされていないかぎり、sql_signalをコールすると、PL/Iプログラムによりメッセージが表示され、PL/I条件ハンドラの制御下でプログラムの実行が続行されます。PL/I条件ハンドラの詳細は、PL/Iのドキュメントを参照してください。

## 関連ルーチン

> なし。

## 例

> 次のSQL$REPORT.SCサンプル・プログラムからの抜粋は、sql_signalルーチンのコール方法を示しています。

>     /* Main loop */
>     do
>         {
>         /* FETCH by SQL to get a database record */
>         EXEC SQL FETCH REPORT_CURSOR INTO
>                     :employee_id, :last_name, :first_name,
>                     :job_code, :department_code, :salary_amount;

>         /* Check return status and take appropriate action */
>         switch (SQLCA.SQLCODE)
>             {
>             /* If a record was returned, print a detail line */
>             case SQL_SUCCESS :
>                 detail_line();
>                 break;
>             /* If end of stream is encountered, print the final totals */
>             case STREAM_EOF :
>                 job_code_foot();
>                 dept_code_foot();
>                 final_foot();
>                 break;
>             /* Any other status is an error condition and will be trapped by the
>                SQL error handler */
>             default :
>                 break;
>             }
>         }
>     while (SQLCA.SQLCODE == SQL_SUCCESS);

>     /* Close the report file */
>     fclose(report_file);

>     /* Close the cursor */
>     EXEC SQL CLOSE REPORT_CURSOR;

>     /* Rollback the transaction */
>     EXEC SQL ROLLBACK;

>     exit(1);

>     ERROR_HANDLER:
>         printf("\nAn unexpected error was encountered %d", SQLCA.SQLCODE);
>         sql_signal();
>     }