当然有错误了,在直接open它,fetch它,close它肯定没问题。
问题是你只声明了一次的游标。将声明的语法同样的放在循环中(并且取不同的名称)
问题是你只声明了一次的游标。将声明的语法同样的放在循环中(并且取不同的名称)
解决方案 »
- 请教一句sql怎么写,菜鸟问题
- Oracle的几个概念:数据库名,全局数据库名,SID,实例,命名空间,schema
- 一个困扰很长时间的 oracle EM 的问题,高分寻求解决方法!!!!
- 创建表的 oracle sql 代码 怎么转换成 在MSSqlServer中执行?? ??
- 【求救】SQL语句怎么写?
- 請問怎樣實現一個簡單的分組查詢? 謝謝
- 倒库问题
- 做条件查询出现这个问题?SQL execution error, ORA-00918: 未明确定义列
- ^ o ^ 把两个字符串嵌套成一个字符串
- 知道Oracle数据库的超级管理的用户名密码后,怎么修改操作系统的超管的密码?
- 如何select出一张表内某个字段是最小的,或者是空的那条纪录(该字段可能有null值)内有详细描述!!!
- 请问各位平时是如何书写这样的SQL能比较有效率:
EXEC SQL whenever not found do break;
for(;;)
{EXEC SQL FETCH SALESPEOPLE
INTO :SS,:NAME,:SAL;
}EXEC SQL CLOSE SALESPEOPLE;
为什么不这么写呢
#include <sqlca.h>
#include <string.h>EXEC SQL BEGIN DECLARE SECTION;
VARCHAR username[20];
VARCHAR password[20];
VARCHAR dbname[20];
int SS;
VARCHAR NAME[10];
int SAL;
EXEC SQL END DECLARE SECTION;
void main()
{
strcpy((char *)username.arr,"SCOTT");
username.len = strlen((char *)username.arr);
strcpy((char *)password.arr,"TIGER");
password.len = strlen((char *)password.arr);
strcpy((char *)dbname.arr,"ctc");
dbname.len = strlen((char *)dbname.arr);
EXEC SQL WHENEVER SQLERROR STOP;
EXEC SQL CONNECT :username
IDENTIFIED BY :password USING :dbname;
if (sqlca.sqlcode != 0)
{
printf("\n与Oracle数据库连接失败!\n");
return;
}
EXEC SQL DECLARE SALESPEOPLE CURSOR FOR
SELECT EMPNO,ENAME,SAL
FROM EMP
WHERE ENAME='KING';
if (sqlca.sqlcode != 0)
{
printf("\n游标声明失败!\n");
return;
}
while(1)
{
EXEC SQL OPEN SALESPEOPLE;
printf("sqlcode:%d\n",sqlca.sqlcode);
EXEC SQL FETCH SALESPEOPLE
INTO :SS,:NAME,:SAL;
printf("SS:%d\nNAME:%s\nSAL:%d\n",SS,(char *)NAME.arr,SAL);
EXEC SQL CLOSE SALESPEOPLE;
break;
}
}
但是我的程序就是放在while中去open就会返回sqlcode=-1012,晕了,怎么回事呀?