最近遇到一种情况,比如有100个表,然后外部程序需要检查每个表中的数据正确否。单独 在外部程序语言 中 每次执行 select * from tableX,很耗时间。这时 想到的一个办法是 写一个存储过程,然后一次传出100个游标。 每个游标对应一个打开的表。然后外部程序调用这个存储过程,得到这些游标。然后在外部程序中赋值给相应的数组,再检查值。----------因为想传出多个游标,因此原本想用比如游标数组之类的。但发现TYPE c_array IS TABLE OF SYS_REFCURSOR; 报错 Index tables of cursor variables are disallowed.并且搜索了一下 发现很少有这种想传出多个游标的例子。很疑惑 是不是这样做很多坏处吗?或者Oracle不支持这种? 但貌似单个设out参数传出是可以的,至少试验了10个游标传出,都可以。请教啊~~~~ 

解决方案 »

  1.   

    TYPE c_array IS TABLE OF SYS_REFCURSOR;  
    需要放在包里定义,存储过程也要放在这个包里,这样就不会报错了
      

  2.   

    看起来 SYS_REFCURSOR 不是 REF_CURSOR, 应该不需要定义在包里。查了一下, Oracle好像是不支持cusor array的。因为对于Oracle经验不多,所以低估了游标开销。 的确,不应该在存储过程里 传出大量游标的。