以下代码是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)*ARRAY_SIZE);
count++;
printf("count: %d\n", count); //打印次数
size += ARRAY_SIZE;
rs_count = sqlca.sqlerrd[2];
*p_gos = (struct g_stat *)realloc(*p_gos, sizeof(struct g_stat)*size);
}
if(*p_gos != NULL){
bcopy(db_gos, *p_gos + (ARRAY_SIZE*count), sizeof(struct g_stat)*(sqlca.sqlerrd[2]-rs_count));
rs_count = sqlca.sqlerrd[2];
}
EXEC SQL CLOSE :list_curs;
EXEC SQL FREE :list_curs; db_gos和p_gos都是结构g_stat变量,ind_db_gos是结构指示变量。现在遇到的问题是,在调用此PRO*C时,统计一天的结果的时候,在代码1用掉了2、 3秒钟的时间,
可是在进去循环取游标值的时候,在printf("count: %d\n", count); //打印次数 为 1的时候,就这段时间用了10多分钟,count = 2,count =3时候用的时间几乎可以忽略不计。
最后总共返回了3000多条数据。郁闷在于我查数据才用了几秒钟,把数据取出来却用了10多分钟的时间,实在找不出什么问题出来,忘高手解释或者提供下解决方法!
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)*ARRAY_SIZE);
count++;
printf("count: %d\n", count); //打印次数
size += ARRAY_SIZE;
rs_count = sqlca.sqlerrd[2];
*p_gos = (struct g_stat *)realloc(*p_gos, sizeof(struct g_stat)*size);
}
if(*p_gos != NULL){
bcopy(db_gos, *p_gos + (ARRAY_SIZE*count), sizeof(struct g_stat)*(sqlca.sqlerrd[2]-rs_count));
rs_count = sqlca.sqlerrd[2];
}
EXEC SQL CLOSE :list_curs;
EXEC SQL FREE :list_curs; db_gos和p_gos都是结构g_stat变量,ind_db_gos是结构指示变量。现在遇到的问题是,在调用此PRO*C时,统计一天的结果的时候,在代码1用掉了2、 3秒钟的时间,
可是在进去循环取游标值的时候,在printf("count: %d\n", count); //打印次数 为 1的时候,就这段时间用了10多分钟,count = 2,count =3时候用的时间几乎可以忽略不计。
最后总共返回了3000多条数据。郁闷在于我查数据才用了几秒钟,把数据取出来却用了10多分钟的时间,实在找不出什么问题出来,忘高手解释或者提供下解决方法!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货