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(); }