まず、Pro * Cでは、SQLステートメントは、次のEXEC SQL
ようなディレクティブを使用して直接実行できます。
EXEC SQL INSERT INTO.... VALUES...
他のすべてのSQLステートメントも同じ方法で実行できます。すべてのPro*Cは;SQLCA.H
のようなヘッダーファイルを使用します。EXEC SQL INCLUDE SQLCA.H
この行は、プログラムに解釈する必要のあるSQLステートメントがあることをPro*Cプリコンパイラーに通知します。
動的SQLは、次のようにPro*Cでも実行できます。
char *cmd = "INSERT INTO emp VALUES(1234, 'jon', 3)";
EXEC SQL PREPARE q FROM :cmd;
EXEC SQL EXECUTE q;
または
char cmd[255] = "TRUNCATE TABLE tab_name";
EXEC SQL EXECUTE IMMEDIATE :cmd;
**:
記号に注意してください。これは、変数がSQLエンジンへのバインド変数であることを示します。
次に、例外処理について説明します。以下は、Pro*CでSQLエラーを処理するために使用できるいくつかの例です-
EXEC SQL INSERT INTO .... VALUES...;
if SQL_ERROR_FOUND //Exception Handling starts
{
sprintf(err_data,"INSERT/SELECT");
//write error to log file, use SQLCODE to see what particular error happened
return(-1);
}
カーソルを開く-
EXEC SQL OPEN c_cursor;
if SQL_ERROR_FOUND //Exception Handling starts
{
sprintf(err_data,"CURSOR FETCH: cursor=c_item");
//write error to log file
return(-1);
}
else if NO_DATA_FOUND
{//do something
}
または動的SQLを使用-
EXEC SQL EXECUTE IMMEDIATE :cmd;
if SQL_ERROR_FOUND
{
sprintf(err_data,"EXECUTE DYNAMIC STATEMENT %s", cmd);
//write error to log file
return(FATAL);
}
など...例外/エラー処理は、エラーを処理if..else
する対象のすぐ下にEXEC SQL <statement>
ある必要があることを忘れないでください。
SQLCODE (sqlca.sqlcode)
最も一般的に使用されるエラーコードです。SQLCA.H
プログラムの先頭で、できればasを含めた直後にlongとして宣言されlong SQLCODE;
ます。SQLCODEは、すべてのSQLステートメントの後にOracleによって入力され、Oracleサーバーのエラー番号を保持します。このコードは、エラー処理とロギングの目的にも使用できます。