0
 create or replace procedure BAS_NUM_UPD  is

 cursor cur is

 select distinct o.oi_b,mpr.pa_ke_i,ltrim(substr(convert_171_to_711(cp.p_t_num),1,7),'0') bs_nbr

    from t_obj o, mat_pa_rel mp, cor_pa cp
    where o.ob_t = 'something'
    and o.oi_b = mp.oi_b
    and mp.pa_ke_i = cp.pa_ke_i;

 l_ba_num_at_i  number(10) := get_attribute_id('Ba  timber');

 flag1 VARCHAR2(10);

 type t1 is table of varchar2(10);
 par_k t1;

 BEGIN
     for x in cur loop
 BEGIN      

   select pa_ke_i into par_k from mat_pa_rel where oi_b=x.oi_b ;

  if par_k.count=null  then  

  insert into cs_val (oi_b, at_i, value, flag, ) values (x.oi_b, l_ba_num_at_i, null, 1);

  end if;

  select flag into flag1 from cs_val where at_i = l_ba_num_at_i  and oi_b = x.oi_b
    and value = x.bs_nbr;

  EXCEPTION 

    when NO_DATA_FOUND THEN

      insert into cs_val (oi_b, at_i, value, flag, )
          values (x.oi_b, l_ba_num_at_i, x.bs_nbr, 1);

    flag1 :='Nothing';

    when OTHERS 
then
       raise_application_error(-20011,'Unknown Exception in PROCEDURE');
END;

end loop;
end BAS_NUM_UPD;

エラー:PLS-00642:ローカルコレクションタイプはSQLステートメントでは許可されていません

4

2 に答える 2

1

一括収集を行う場合は、実行する必要があります

select pa_ke_i bulk collect into par_k from mat_pa_rel where oi_b=x.oi_b ;

それなら私はifが正しくないと思います。私はあなたがする必要があると思います

if par_k.count = 0 then

しかし、正直に言うと、あなたはただ数えるかもしれません

select count(*) into l_cnt from mat_pa_rel where oi_b=x.oi_b;

If l_cnt = 0 then ...

もちろん、l_cntを定義する必要があります。

于 2012-07-30T20:13:29.700 に答える
0

type t1pl/sqlブロックではなくスキーマで作成する必要があります。

于 2012-07-30T14:59:55.950 に答える