oracle 游标很慢,调用存储过程取游标数据慢问题

在调用存储过程`STAT.proc_stat`并处理返回的游标数据时,发现执行时间异常。代码1中调用存储过程耗时约2到3秒,但在代码2中,仅获取第一条游标数据就花费了10多分钟。问题出现在游标的数据读取和内存分配上。当count=1时,数据拷贝和内存扩展操作显著增加了解析时间。尽管后续的记录处理时间较短,但初始延迟严重影响了整体性能。目前,尚未找到问题的具体原因。
摘要由CSDN通过智能技术生成

原帖由 grand508 于 2011-9-8 15:14 发表 thread-1481476-1-1.html

以下代码是PRO*C的部分代码:

代码1:

EXEC SQL EXECUTE

BEGIN

STAT.proc_stat(:start_time, :end_time, :list_curs);

:ret_db:=0;

EXCEPTION

WHEN OTHERS THEN

:ret_db:=1;

END;

END-EXEC;

调用存储过程, 经测试统计一天的结果的话,可能这部分代码耗时 2 3秒钟

代码2:

rs_count = 0;    //最终返回游标取值的总记录条数

count = 0;

ARRAY_SIZE = 1000;

size = ARRAY_SIZE ;

*p_gos = (struct g_stat *)malloc(sizeof(struct g_stat)*size);

EXEC SQL WHENEVER NOT FOUND DO BREAK;

while(1){

EXEC SQL FETCH :list_curs INTO :db_gos:ind_db_gos;

bcopy(db_gos, *p_gos + (ARRAY_SIZE*count), sizeof(struct g_stat)*AR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值