那帮我解释一下为什么通不过呢?
create or replace procedure bustrans.picconsumeline(i_begindate in varchar2,i_enddate in varchar2 ,i_computename in varchar2) is
v_lineid varchar2(4);
v_linecentid varchar2(2);
n_icid numeric(5,0);
n_icnum numeric(12,0);
n_icmoney numeric(12,2);
n_cardnum numeric(12,0);
n_moneynum numeric(12,0);
v_linename varchar2(30);
v_icname varchar2(20);
v_beginstation varchar2(30);
v_endstation varchar2(30);
v_deptid varchar2(9);
v_deptname varchar2(30);begin
delete from icconsumeline_temp where computename = i_computename;
commit;
declare cursor line_curs is
select line_id,linecent_id from uv_linecent;
begin
open line_curs;
fetch line_curs into v_lineid,v_linecentid;
while(line_curs%found) loop
declare cursor ic_curs is
select ic_id from ictype_dict where ic_id < 32;
begin
open ic_curs;
fetch ic_curs into n_icid;
while (ic_curs%found) loop
select nvl(sum(ic_num),0),nvl(sum(ic_money),0), nvl(sum(card_num),0),nvl(sum(money_num),0)
into n_icnum,n_icmoney,n_cardnum,n_moneynum
from bustwice_dict
where ic_id = n_icid
and to_char(use_date,'yyyy-mm-dd') >= i_begindate
and to_char(use_date,'yyyy-mm-dd') <= i_enddate
and line_id = v_lineid
and linecent_id = v_linecentid;----需要起点终点,必须有线路分号
if n_icnum > 0 and n_icmoney >= 0 then
select a.begin_station,a.end_station,b.line_name,b.dept_id
from uv_linecent a,
uv_line b
where a.line_id = b.line_id
and a.line_id = v_lineid
and a.line_id = v_linecentid;
select ic_name into v_icname from ictype_dict where ic_id = n_icid;
select dept_name into v_deptname from department_dict where dept_id = v_deptid;
insert into icconsumeline_temp
values(v_lineid,v_linename,v_beginstation,v_endstation,n_icid,v_icname,n_cardnum,n_moneynum,n_icnum,n_icmoney,v_deptid,v_deptname,i_computename);
end if;
n_icnum := 0;
n_icmoney := 0;
fetch ic_curs into n_icid;
end loop;
close ic_curs;
end ;
fetch line_curs into v_lineid,v_linecentid;
end loop;
close line_curs;
end;
commit;
end ;
create or replace procedure bustrans.picconsumeline(i_begindate in varchar2,i_enddate in varchar2 ,i_computename in varchar2) is
v_lineid varchar2(4);
v_linecentid varchar2(2);
n_icid numeric(5,0);
n_icnum numeric(12,0);
n_icmoney numeric(12,2);
n_cardnum numeric(12,0);
n_moneynum numeric(12,0);
v_linename varchar2(30);
v_icname varchar2(20);
v_beginstation varchar2(30);
v_endstation varchar2(30);
v_deptid varchar2(9);
v_deptname varchar2(30);begin
delete from icconsumeline_temp where computename = i_computename;
commit;
declare cursor line_curs is
select line_id,linecent_id from uv_linecent;
begin
open line_curs;
fetch line_curs into v_lineid,v_linecentid;
while(line_curs%found) loop
declare cursor ic_curs is
select ic_id from ictype_dict where ic_id < 32;
begin
open ic_curs;
fetch ic_curs into n_icid;
while (ic_curs%found) loop
select nvl(sum(ic_num),0),nvl(sum(ic_money),0), nvl(sum(card_num),0),nvl(sum(money_num),0)
into n_icnum,n_icmoney,n_cardnum,n_moneynum
from bustwice_dict
where ic_id = n_icid
and to_char(use_date,'yyyy-mm-dd') >= i_begindate
and to_char(use_date,'yyyy-mm-dd') <= i_enddate
and line_id = v_lineid
and linecent_id = v_linecentid;----需要起点终点,必须有线路分号
if n_icnum > 0 and n_icmoney >= 0 then
select a.begin_station,a.end_station,b.line_name,b.dept_id
from uv_linecent a,
uv_line b
where a.line_id = b.line_id
and a.line_id = v_lineid
and a.line_id = v_linecentid;
select ic_name into v_icname from ictype_dict where ic_id = n_icid;
select dept_name into v_deptname from department_dict where dept_id = v_deptid;
insert into icconsumeline_temp
values(v_lineid,v_linename,v_beginstation,v_endstation,n_icid,v_icname,n_cardnum,n_moneynum,n_icnum,n_icmoney,v_deptid,v_deptname,i_computename);
end if;
n_icnum := 0;
n_icmoney := 0;
fetch ic_curs into n_icid;
end loop;
close ic_curs;
end ;
fetch line_curs into v_lineid,v_linecentid;
end loop;
close line_curs;
end;
commit;
end ;
请提供相关对象的定义.
select * from uv_linecent,能显示结果,uv_linecent里包含的表都已经授权给public,而且在过程中我把视图名换成表名时立即没有问题!
视图代码如下:
create or replace view busstatic.uv_linecent as
select L1.BEGIN_STATION,L1.END_STATION,
L1.LINE_ID,L1.LINECENT_ID,
L1.MILIMETRE,L1.OPERATE_ID,
L1.STATE,to_char(L1.STATE_DATE,'yyyy-mm-dd hh:mi:ss') STATE_DATE
from LINECENT_DICT L1
where L1.State_Date=(select max(L2.State_Date) from LineCent_dict L2
where L1.line_id=L2.line_id and L1.Linecent_id=L2.LineCent_id)