那帮我解释一下为什么通不过呢?
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 ;

解决方案 »

  1.   

    uv_linecent是不是当前用户的?
    请提供相关对象的定义.
      

  2.   

    uv_linecent 不是当前用户,但我创建过程时是SYSTEM,在非过程中我使用
    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)