现在有一个报表接口的项目,数据量比较大,我写了一个存储过程,用循环的方式把对方需要的数据查询出来之后插入了一张临时表,然后在存储过程中定义了一个游标输出变量,把临时表的最终的结果通过游标变量输出的方式传给对方系统,这样有一个问题就是,写临时表需要的时间比较长,有没有办法不通过临时表,定义一个类似于模型的东西,把向临时表insert数据的操作转换成向模型填充数据,数据填充完毕之后,再进行输出Oracle存储过程 结果集 游标变量输出

解决方案 »

  1.   

    报表系统一般都采用的dblink的方式,查出来后直接通过dblink插入远程数据有一个问题感觉很奇怪,你既然数据都出来了,为什么还搞个游标一条条来呢根本没必要啊
    如果因为数据量特大,倒是可以考虑多线程的方式比如说:用一个线程读数据,用另外一个线程插入数据,这种情况没必要用临时表了读数据的话,提交频率不能过高也不能太低,每次处理大数据量的时候,我发现500条一次效果不错
      

  2.   

    CREATE TYPE XXXX IS TABLE OF ...;
    试试集合方式代替临时表
      

  3.   

    http://huyunzhi.bokee.com/6134155.html
    只能先试试,如果数据量太大,估计内存也撑不住,还是临时表稳定些
      

  4.   

    恩,经测试发现,往表里面插入数据再读取这种方式的性能还是要比往type里面添加数据要好。
    而且我测试了两种表,一种是临时表,一种是固定表,我发现同样的数据,2300条,固定表插入用时8.6,秒,临时表用时9.6秒,为什么有这种差异呢