Oracle 数据库,数据处理量是200万多条.因数据查询出来后放入TempAccountDataTable该临时表中,后用游标读该表游标的定义:
CURSOR UserTariffInfos IS
    SELECT TariffDate ,UserNo ,TariffMoney ,AlreadyDeliveryMoney ,Payoff ,PaymentMoney ,CreaditVal,EmitDate ,LastTimeDeliveryDate FROM TempAccountDataTable;本身是没有任何问题.但是因TempAccountDataTable不存在,所以编译就通不过.请问如果处理.TempAccountDataTable是需要时创建,用完后就 DROP TABLE TempAccountDataTable;请问该游标如何写才正确.

解决方案 »

  1.   

    http://www.alixixi.com/Dev/DB/ORACLE/2007/2007050836045.html
      

  2.   

    结构是固定的.在运行此存储过程时才创建TempAccountDataTable临时表.运行结束后就会把此临时有删除.
      

  3.   

    如果表结构固定的创建,表名是固定的,那么可以:
    create global temporary table XXX
    (
      ......
    )
    on commit delete rows;
      

  4.   

    呵呵
      
    GaoFX(紫龙):你的方法我也试了.是不行的.因为INSERT时要死人的.
      

  5.   

    我给你发的地址你看了吗?你定义一个动态游标,创建一个临时表,然后组织一个sql字符串
    sqlstr:='SELECT TariffDate ,UserNo ,TariffMoney ,AlreadyDeliveryMoney ,Payoff ,PaymentMoney ,CreaditVal,EmitDate ,LastTimeDeliveryDate FROM TempAccountDataTable';open cur for sqlstr;//这样就实现了你的要求了
      

  6.   

    --用户必须有create any table 权限
    create or replace package pkg_test
    is
      type ResultData is ref cursor;
      procedure test;
    end pkg_test;
    /
    create or replace package body pkg_test
    is
      procedure test
      is
        cur ResultData;
        fid varchar2(30);
        fnumber int;
        sqlstr varchar2(8000);
      begin
        sqlstr:='create global temporary table tmp( cid VARCHAR2(30),cnumber int )On Commit PRESERVE Rows';
        Execute Immediate sqlstr;
        Execute Immediate 'insert into tmp values(''1'',1)';
        Execute Immediate 'insert into tmp values(''2'',2)';
        sqlstr:='select * from tmp';
        open cur for sqlstr;
        loop
        fetch cur into fid,fnumber;
        exit when cur%notfound;
        dbms_output.put_line( fid||'-'||fnumber );
        end loop;
        close cur;
      end;
    end pkg_test;
    --测试
    declare
     i int;
    begin
     pkg_test.test;
    end;
    --输出结果
    1-1
    2-2
      

  7.   

    你的TempAccountDataTable还没有创建你怎么能把它放到定义部分?按照你的要求也只能像我写得那样用