写了个存储过程,过程中将需要得到的数据放在临时表中,最后打开游标
procedure Test(pntOUT OUT return_cur)
as
  cnt     integer(10);
  BEGIN
  cnt := 0;
  loop
    insert into tp04_flt (STOD, EXEC, FLNO, SSRMC, ACTT, TTYP, ADEP, ADES, ETOD, ETOA, ATOD, ATOA, CTD, RW_TM, ROUTE)
values ('...', '...', '...', '...', '...', 'S', '...', '...', '...', '...', '...', '', '', '', '...');
    cnt := cnt + 1;
    exit when cnt = 200;
    end loop;
 open pntOUT for 
      select * from tp04_flt;
end; 
然后调用ODatabase db             //db已连接
ODynaset dyn;
OParameterCollection params = db.GetParameters();
oresult res = db.ExecuteSQL(szSQL.c_str());   //szSQL是begin Test();end;
params.GetParameter("pntOUT").GetValue(&dyn);
结果发现dyn中始终只有101条数据,这是为什么呢?
也就是说返回的游标查询的是临时表时,数据库返回的结果集始终只有101条。
大家有碰到这种情况吗?

解决方案 »

  1.   

    上面使用的是c++开发的,已经封装。params.GetParameter("pntOUT").GetValue(&dyn)后,dyn返回的结果集中就只有101条数据,莫非是oracle返回的值就只有101条?但实际应该有200条
      

  2.   

    只用用PLSQL中的测试功能时可以看到200条~
      

  3.   

    确保  这个table只有你一个人使用么?  有其他人修改么?能单独写个c++的语句  单独查询一次  看看有多少条·    光看sql  貌似没啥问题·
      

  4.   

    这个TABLE tp04_flt是个临时表,应该是在执行存储过程中是独立的。刚才测试了下,如果我存储过程中返回的游标都是查询临时表,貌似都只有101条,而且第100条和101条数据一样