Oracle 数据库,数据处理量是200万多条.因数据查询出来后放入TempAccountDataTable该临时表中,后用游标读该表游标的定义:
CURSOR UserTariffInfos IS
SELECT TariffDate ,UserNo ,TariffMoney ,AlreadyDeliveryMoney ,Payoff ,PaymentMoney ,CreaditVal,EmitDate ,LastTimeDeliveryDate FROM TempAccountDataTable;本身是没有任何问题.但是因TempAccountDataTable不存在,所以编译就通不过.请问如果处理.TempAccountDataTable是需要时创建,用完后就 DROP TABLE TempAccountDataTable;请问该游标如何写才正确.
CURSOR UserTariffInfos IS
SELECT TariffDate ,UserNo ,TariffMoney ,AlreadyDeliveryMoney ,Payoff ,PaymentMoney ,CreaditVal,EmitDate ,LastTimeDeliveryDate FROM TempAccountDataTable;本身是没有任何问题.但是因TempAccountDataTable不存在,所以编译就通不过.请问如果处理.TempAccountDataTable是需要时创建,用完后就 DROP TABLE TempAccountDataTable;请问该游标如何写才正确.
解决方案 »
- 怎么写sql语句,按字段fld1分组,求组合值
- 如果访问1不断递增的数据量百万级,想检索存在另外1个MS SQLSERVER数据库中的某数据...
- 建立索引:性能会有问题吗?
- Oracle9i中如何使类型为varchar2(50)的default value 为''(即空字符串)而不是null呢?
- 执行以下SQL语句出现的问题
- 怎样修改oracle cache
- 谁能帮我做下优化
- 急救
- 怎么在一个时间段内执行一个存储过程?
- 查找指定字符在字段的位置的函数?
- ORA-01019错误,应该如何解决?
- FC6上安装oracle 10g时报错 "Thrown when the IP address of a host cannot be determined"
create global temporary table XXX
(
......
)
on commit delete rows;
GaoFX(紫龙):你的方法我也试了.是不行的.因为INSERT时要死人的.
sqlstr:='SELECT TariffDate ,UserNo ,TariffMoney ,AlreadyDeliveryMoney ,Payoff ,PaymentMoney ,CreaditVal,EmitDate ,LastTimeDeliveryDate FROM TempAccountDataTable';open cur for sqlstr;//这样就实现了你的要求了
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