请教open_cursor 在线等待!!! http://www.cnoug.org/viewthread.php?tid=17870 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是我程序中的一个函数,会经常调用此函数,出问题的地方已经标出,请帮忙看看,谢谢 EXEC ORACLE OPTION (RELEASE_CURSOR=YES); sprintf((char *)pcSQL.arr,"%s","SELECT nvl(ID,-1) FROM TABLE1 "); pcSQL.len = strlen((char *)pcSQL.arr); EXEC SQL WHENEVER SQLERROR GOTO NO_FOUND; EXEC SQL WHENEVER NOT FOUND GOTO NO_FOUND; EXEC SQL PREPARE S FROM :pcSQL; EXEC SQL DECLARE t_cur CURSOR FOR S; EXEC SQL OPEN t_cur; for(;;) { EXEC SQL FETCH t_cur INTO :lId;//此句占用一个cursor,个数不增加 EXEC SQL WHENEVER SQLERROR DO sql_msg((char*)"Error When Select number ."); EXEC SQL SELECT COUNT(*) INTO :number FROM TABLE2 WHERE ID=:lId; for(int i=1;i<=number;i++) { number1=i; EXEC SQL SELECT CODE INTO :Code FROM TABLE3 WHERE ID=:lId AND INDEX=:number1; //此句占用cursor,而且占用的数量会增加 EXEC SQL SELECT COUNT(*) INTO :num FROM table4 WHERE CODE=:vcCityCode; if(i==1&&num==1) { break; } if(i==1&&num==0) { continue; } if(i!=1&&num==0) { continue; } if(i!=1&&num==1) { EXEC SQL PREPARE V FROM :pcSQL1; EXEC SQL DECLARE v_cur CURSOR FOR V; EXEC SQL OPEN v_cur; for(;;) { fetch into *** ;//一些操作 } NO_FOUND1: EXEC SQL CLOSE v_cur; } break; } } NO_FOUND: EXEC SQL CLOSE t_cur; 在fetch后加上 exit when *****%notfound 试试****表示你的游标感觉你的for(int i=1;i<=number;i++)这句是造成游标增大的原因为什么不用动态游标呢? 一列多个值对应查询 pl/sql导数据时灵时不灵 oracle 的问题谁能帮忙解决下 oracle用户权限问题 问一个关于sql 查询 的问题 监听程序启动不了,服务没有及时响应启动或控制请求。 oracle9i启动不了ManagementServer服务 一个SQL语句问题 初学:数据库中两表之间有一字段相关联请问如何进行Insert em开不起,也重配不了 oracle定时作业?! 请问比对由两个Select产生的表中字段是否有不同的纪录?
EXEC ORACLE OPTION (RELEASE_CURSOR=YES); sprintf((char *)pcSQL.arr,"%s","SELECT nvl(ID,-1) FROM TABLE1 ");
pcSQL.len = strlen((char *)pcSQL.arr);
EXEC SQL WHENEVER SQLERROR GOTO NO_FOUND;
EXEC SQL WHENEVER NOT FOUND GOTO NO_FOUND;
EXEC SQL PREPARE S FROM :pcSQL;
EXEC SQL DECLARE t_cur CURSOR FOR S;
EXEC SQL OPEN t_cur;
for(;;)
{
EXEC SQL FETCH t_cur INTO :lId;//此句占用一个cursor,个数不增加
EXEC SQL WHENEVER SQLERROR DO sql_msg((char*)"Error When Select number .");
EXEC SQL SELECT COUNT(*) INTO :number FROM TABLE2 WHERE ID=:lId;
for(int i=1;i<=number;i++)
{
number1=i;
EXEC SQL SELECT CODE INTO :Code FROM TABLE3 WHERE ID=:lId AND INDEX=:number1;
//此句占用cursor,而且占用的数量会增加
EXEC SQL SELECT COUNT(*) INTO :num FROM table4 WHERE CODE=:vcCityCode;
if(i==1&&num==1)
{
break;
}
if(i==1&&num==0)
{
continue;
}
if(i!=1&&num==0)
{
continue;
}
if(i!=1&&num==1)
{
EXEC SQL PREPARE V FROM :pcSQL1;
EXEC SQL DECLARE v_cur CURSOR FOR V;
EXEC SQL OPEN v_cur;
for(;;)
{
fetch into *** ;//一些操作
}
NO_FOUND1:
EXEC SQL CLOSE v_cur;
}
break;
}
}
NO_FOUND:
EXEC SQL CLOSE t_cur;