oracle 嵌入式编程遇到的问题

 

①   C语言的时候我们总是想在函数外定义一些全局变量,可是在Oracle编程的时候却出现了没有定义变量的情况发生。其实原因很简单,你没有像这样定义

exec sql begin declare section;

  char s_no[6];
  char s_name[10];
  int s_age;
  char user_name[50], user_pwd[20], net_name[20];
 exec sql end declare section;

蓝色字体很重要,把你需要的变量都放在里面 这样才能保证你的变量不会出错!!!

②proc 编程中游标的使用

 exec sql declare sx cursor for
    select s#,sname,age from s ;
//printf( "sqlcode:%d\n ",sqlca.sqlcode); //可以进行单步调试

//只有返回0的时候才是正确的
  exec sql open sx;
//printf( "sqlcode:%d\n ",sqlca.sqlcode); 
while(1)
{
 
 exec sql fetch sx into s_no,s_name,s_age ;
//printf( "sqlcode:%d\n ",sqlca.sqlcode);

 //printf("%s %s %d",s_no,s_name,s_age);
 /*if(sqlca.sqlcode == 2)
 {
 printf("没查到\n");
 break;
 }
 if(sqlca.sqlcode == 1)
 {
 printf("错误\n");
 break;
 }*/
if(sqlca.sqlcode != 0)
 {

 break;
 }
 printf("学号:%s%s的年龄是%d\n", s_no,s_name, s_age);

 
EXEC SQL CLOSE sx;

EXEC SQL COMMIT WORK RELEASE;

 

 

附:如果一个 SQL 语句发生了错误,那么 sqlca.sqlcode 将是非零值。
如果 sqlca.sqlcode 小于 0 那么就是发生了某种严重的错误,象
数据库定义与查询定义不一致等.
如果大于 0 则是通常的错误,象表不包括所要求的行等.

sqlca.sqlcode == 0,成功
sqlca.sqlcode == -1 失败 (获取具体失败信息:messagebox('',"出错信息:"+sqlca.SQLErrText) )--PB里的操作方法
可能发生的错误列表:
-12, Out of memory in line %d. 
通常不出现这个错误。这是你的虚拟内存耗尽的标志。 
-200, Unsupported type %s on line %d. 
通常不出现这个错误.这表明预编译器生成了一些库(函数)不认得的东西.可能你运行的预编译器和当前库不兼容. 
-201, Too many arguments line %d. 
这意味着 Postgres 返回了比我们的匹配变量更多的参数.可能你漏了几个INTO :var1,:var2-列表里的宿主变量. 
-202, Too few arguments line %d. 
这意味着 Postgres 返回了比我们的对应宿主变量要少的参数.可能你多输入了几个INTO :var1,:var2-列表里的宿主变量. 
-203, Too many matches line %d. 
着意味着查询返回了多个行,但你声明的变量不是数组.你执行的 SELECT 可能不是唯一的. 
-204, Not correctly formatted int type: %s line %d. 
着意味着宿主变量是一个 int 类型并且 Postgres 数据库里的字段是另一种类型,包含着一个不能转换成一个 int 类型的数值.库(函数)使用 strtol 做此类转换. 
-205, Not correctly formatted unsigned type: %s line %d. 
着意味着宿主变量是一个 unsigned int(无符号整数)类型而Postgres 数据库里的字段是另外一种类型并且包含一个不能转换成unsigned int 的数值.库(函数)使用 strtoul 做这类转换. 
-206, Not correctly formatted floating point type: %s line %d. 
着意味着宿主变量是一个 float (浮点)类型而 Postgres 数据库里的字段是另外一种类型并且包含一个不能转换成 float 的数值.库(函数)使用 strtod 做这类转换. 
-207, Unable to convert %s to bool on line %d. 
这意味着宿主变量是一个 bool (布尔)类型,而 Postgres 数据库里的字段值既不是 't' 也不是 'f'。 
-208, Empty query line %d. 
Postgres 返回 PGRES_EMPTY_QUERY,可能的原因是该查询实际上是空的。 
-220, No such connection %s in line %d. 
程序试图访问一个不存在的联接。 
-221, Not connected in line %d. 
程序试图访问一个存在的,但是没有打开的联接。 
-230, Invalid statement name %s in line %d. 
你试图使用的语句还没准备好。 
-400, Postgres error: %s line %d. 
某种 Postgres 错误。该消息包含来自 Postgres 后端的信息。 
-401, Error in transaction processing line %d. 
Postgres 给我们的信号,表明我们无法开始,提交或者回卷该事务。 
-402, connect: could not open database %s. 
与数据库的联接无法工作。 
sqlca.sqlcode == 100,
Data not found line %d. 
这是一个"正常的"错误,告诉你你正在查询的东西找不到或者我们已经越过了游标的范围。

附录传送门:http://blog.csdn.net/mobsmobs/archive/2009/01/18/3827774.aspx

你可能感兴趣的:(oracle 嵌入式编程遇到的问题)