当前位置: 代码迷 >> Oracle管理 >> 用ProC 安插数据不成功
  详细解决方案

用ProC 安插数据不成功

热度:84   发布时间:2016-04-24 05:01:42.0
用ProC 插入数据不成功
C/C++ code
#include <stdio.h>EXEC SQL INCLUDE SQLCA;void main(){  /*声明宿主变量*/  EXEC SQL BEGIN DECLARE SECTION;  VARCHAR usr[20],pass[20],serv[20];  char name[20];  int id,score;  EXEC SQL END DECLARE SECTION;  /*设置连接数据库的用户名、密码和数据库服务名*/  strcpy(usr.arr,"orcl");  usr.len=(unsigned short)strlen((char *)usr.arr);  strcpy(pass.arr,"123456");  pass.len=(unsigned short)strlen((char *)pass.arr);  strcpy(serv.arr,"orcl");  serv.len=(unsigned short)strlen((char *)serv.arr);    EXEC SQL CONNECT :usr IDENTIFIED BY :pass USING :serv;  /*如果正式编程,最好加入对sqlca.sqlcode的判断  if(sqlca.sqlcode)  { printf("ORA-ERROR: sqlca.sqlcode=%d\n",sqlca,sqlcode); exit(0);  }*/  printf("Connect!\n");  /*用户输入欲查询的ID号*/    id=4;    strcpy(name,"liu");    score=98;  /*执行动态的SQL查询语句*/  EXEC SQL INSERT INTO student(id,name,score) VALUES (:id,:name,:score);  printf("id=%d   Name=%s    Score=%d\n",id,name,score);  /*提交事务并断开与数据库的连接*/EXEC SQL COMMIT WORK;EXEC SQL COMMIT WORK RELEASE;  printf("Disconnect!\n");}

错在哪里了呢?

------解决方案--------------------
对proc不熟悉,帮顶了
------解决方案--------------------
(1) 现在很少用 VARCHAR usr[20],pass[20],serv[20];直接用宿主变量char来替代
(2) 不管是发布代码还是测试代码,这种错误跟踪和判断是必须的。除了sqlca.sqlcode外,还应该加入错误信息跟踪:sqlca.sqlerrm.sqlerrmc。在每个proc操作之后
 /*如果正式编程,最好加入对sqlca.sqlcode的判断
if(sqlca.sqlcode)
{
 printf("ORA-ERROR: sqlca.sqlcode=%d\n",sqlca,sqlcode);
 exit(0);
}*/
(3) 单纯这些代码是没有办法判断问题出在什么地方的。
  相关解决方案