用两个游标写存储过程

nick849779125 2015-05-11 09:32:02
写了个大概,然后报错是错误:PLS-00103: Encountered the symbol "year_id,month_id,day_id" when expecting one of the following:

begin function package pragma procedure subtype type use
<an identifier> <a double-quoted delimited-identifier> form
current cursor
。 题目要求是第一个游标里放switch_id,范围是570到580,第二个游标是日期,根据日期的变化循环,num_cdr的合计,相邻两天num_cdr的差,还有差的百分比。希望大神能够指导 还有很多问题想咨询。qq:506241488

create or replace procedure p_sjm_p
as
declare SWITCHid number(10);
declare date_id:='year_id,month_id,day_id';
declare sum_cdr,cha_cdr,chayi_cdr number(10);
begin

sjm_cur cursor FOR SELECT switch_id FROM sjm_to_f1_sett_hq;
date_cur cursor FOR SELECT date_id,sum(num_cdr) FROM WHERE switch_id=SWITCHid group by switch_id;

OPEN sjm_cur;

sjm_loop: LOOP
FETCH sjm_cur into SWITCHid;
if SWITCHid<570 or SWITCHid>580;
leave sjm_loop;
dbms_output_line('区号:'||SWITCHid)

OPEN date_cur;

date_loop: LOOP
FETCH date_cur INTO sum_cdr,cha_cdr,chayi_cdr;
IF date_id>(sysdate-10) THEN
LEAVE date_loop;
END IF;
if (sysdate-10)<date_id<(sysdate-1) THEN
set sum(num_cdr)=sum_cdr;
set cha_cdr=(b.num_cdr -a.num_cdr);
set chayi_cdr=to_char(round(b.num_cdr - a.num_cdr) / a.num_cdr, 2) * 100) || '%' 差异;
else
set date_id=date_id+1;
set cha_cdr=(b.num_cdr -a.num_cdr);
set chayi_cdr=to_char(round(b.num_cdr - a.num_cdr) / a.num_cdr, 2) * 100) || '%' 差异;
end if;

END LOOP date_loop;
dbms_output.put_line('话单总数:'||sum_cdr||'话单差:'||cha_cdr||'话单差异:'||chayi_cdr);
CLOSE date_cur;


END LOOP sjm_loop;
CLOSE sjm_cur;
END;
...全文
128 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧