首先在Pro*C中,SQL语句可以直接执行,通过EXEC SQL指令,像
EXEC SQL INSERT INTO.... VALUES...
所有其他 SQL 语句都可以以相同的方式执行。每个 Pro*C 都使用 SQLCA.H 头文件,例如 EXEC SQL INCLUDE SQLCA.H;这一行告诉 Pro*C 预编译器该程序有需要在其中解释的 SQL 语句。
动态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 包含为long SQLCODE; 之后。
SQLCODE 由 Oracle 在每个 SQL 语句之后填充,并保存 Oracle 服务器错误号。此代码也可用于错误处理和日志记录。