ALTER PROCEDURE "dba"."pa_yhikjaotus"(in a_id_yksus integer,in a_skoop integer,in a_palgaleht integer,in a_pl_aasta integer,in a_t_akuu numeric(2),in a_t_aasta numeric(4),in a_a_akuu numeric(2),in a_a_aasta numeric(4),in a_v_akuu numeric(2),in a_v_aasta numeric(4),in a_kulnr integer,in a_talnr integer,in a_tulnr integer,in a_objectnr integer,in a_osaknr integer,in a_suundnr integer,in a_statnr integer)
begin
  declare ldc_par1 numeric(15,2);
  declare li_tas_s integer;
  declare li_id_koht integer;
  declare ls_algol char(2);
  declare ls_nimi char(50);
  declare ls_ptk char(16);
  declare li_ptk integer;
  declare ls_talosa char(16);
  declare li_talosa integer;
  declare ls_osa char(16);
  declare li_osa integer;
  declare ls_object char(16);
  declare li_object integer;
  declare ls_osak char(16);
  declare li_osak integer;
  declare ls_suund char(16);
  declare li_suund integer;
  declare ls_stat char(16);
  declare li_stat integer;
  declare err_notfound exception for sqlstate value '02000';
  declare c_pa_tasu insensitive cursor for
    select pa_taslist.tas_s,pa_taslist.nimi,pa_tasu.par1,pa_leping.id_koht
      from pa_tasu left outer join pa_taslist on pa_tasu.tas_s = pa_taslist.tas_s
                   left outer join pa_leping on pa_tasu.lepnr = pa_leping.lepnr
                   left outer join pa_yksus on pa_tasu.yksusnr = pa_yksus.yksusnr
                   left outer join kullist on pa_yksus.kulnr = kullist.kulnr left outer join tallist on pa_yksus.talnr = tallist.talnr left outer join tullist on pa_yksus.tulnr = tullist.tulnr left outer join objlist on pa_yksus.objectnr = objlist.objectnr left outer join osaklist on pa_yksus.osaknr = osaklist.osaknr left outer join suundlist on pa_yksus.suundnr = suundlist.suundnr left outer join statlist on pa_yksus.statnr = statlist.statnr
      where pa_taslist.sisse = 0 and pa_tasu.par1 <> 0 and pa_tasu.par1 is not null and(pa_tasu.yksusnr = a_id_yksus or a_id_yksus = 0) and(pa_yksus.skoop = a_skoop or a_skoop = 0) and((pa_tasu.palgaleht = a_palgaleht and pa_tasu.v_aasta = a_pl_aasta) or a_palgaleht = 0) and(pa_tasu.t_akuu = a_t_akuu or a_t_akuu = 0) and(pa_tasu.t_aasta = a_t_aasta or a_t_aasta = 2001) and(pa_tasu.a_akuu = a_a_akuu or a_a_akuu = 0) and(pa_tasu.a_aasta = a_a_aasta or a_a_aasta = 2001) and(pa_tasu.v_akuu = a_v_akuu or a_v_akuu = 0) and(pa_tasu.v_aasta = a_v_aasta or a_v_aasta = 2001) and("Left"(kullist.ptk,li_ptk) = ls_ptk or a_kulnr = 0) and("Left"(tallist.osa,li_talosa) = ls_talosa or a_talnr = 0) and("Left"(tullist.osa,li_osa) = ls_osa or a_tulnr = 0) and("Left"(objlist.object,li_object) = ls_object or a_objectnr = 0) and("Left"(osaklist.osak,li_osak) = ls_osak or a_osaknr = 0) and("Left"(suundlist.suund,li_suund) = ls_suund or a_suundnr = 0) and("Left"(statlist.stat,li_stat) = ls_stat or a_statnr = 0);
  delete from gl_tr_tabel;
  if a_kulnr > 0 then
    select trim(kullist.ptk) into ls_ptk from kullist where kullist.kulnr = a_kulnr;
    set li_ptk=Length(ls_ptk);
    if li_ptk is null or li_ptk = 0 then
      set a_kulnr=0
    end if
  end if;
  if a_talnr > 0 then
    select trim(tallist.osa) into ls_talosa from tallist where tallist.talnr = a_talnr;
    set li_talosa=Length(ls_talosa);
    if li_talosa is null or li_talosa = 0 then
      set a_talnr=0
    end if
  end if;
  if a_tulnr > 0 then
    select trim(tullist.osa) into ls_osa from tullist where tullist.tulnr = a_tulnr;
    set li_osa=Length(ls_osa);
    if li_osa is null or li_osa = 0 then
      set a_tulnr=0
    end if
  end if;
  if a_objectnr > 0 then
    select trim(objlist.object) into ls_object from objlist where objlist.objectnr = a_objectnr;
    set li_object=Length(ls_object);
    if li_object is null or li_object = 0 then
      set a_objectnr=0
    end if
  end if;
  if a_osaknr > 0 then
    select trim(osaklist.osak) into ls_osak from osaklist where osaklist.osaknr = a_osaknr;
    set li_osak=Length(ls_osak);
    if li_osak is null or li_osak = 0 then
      set a_osaknr=0
    end if
  end if;
  if a_suundnr > 0 then
    select trim(suundlist.suund) into ls_suund from suundlist where suundlist.suundnr = a_suundnr;
    set li_suund=Length(ls_suund);
    if li_suund is null or li_suund = 0 then
      set a_suundnr=0
    end if
  end if;
  if a_statnr > 0 then
    select trim(statlist.stat) into ls_stat from statlist where statlist.statnr = a_statnr;
    set li_stat=Length(ls_stat);
    if li_stat is null or li_stat = 0 then
      set a_statnr=0
    end if
  end if;
  open c_pa_tasu;
  pa_tasu_loop: loop
    --  loe kanne
    fetch next c_pa_tasu into li_tas_s,ls_nimi,ldc_par1,li_id_koht;
    if sqlstate = err_notfound then -- kui eof
      leave pa_tasu_loop
    end if;
    -- kas ei eksisteeri koondis
    if not exists(select 1 from gl_tr_tabel where gl_tr_tabel.id = li_tas_s) then
      insert into gl_tr_tabel( sisse,id,kood,nimi,adeeb,akree,deeb,kree,sdeeb,skree,ldeeb,lkree) values( 0,li_tas_s,'',' '+ls_nimi,0,0,0,0,0,0,0,0) 
    end if;
    -- summeerimine
    update gl_tr_tabel set deeb = deeb+ldc_par1,adeeb = adeeb+(if li_id_koht = 1 then ldc_par1 else 0 endif),akree = akree+(if li_id_koht = 2 then ldc_par1 else 0 endif),ldeeb = ldeeb+(if li_id_koht = 3 then ldc_par1 else 0 endif),lkree = lkree+(if li_id_koht = 4 then ldc_par1 else 0 endif) where gl_tr_tabel.id = li_tas_s
  end loop pa_tasu_loop;
  close c_pa_tasu;
  delete from gl_tr_tabel where gl_tr_tabel.deeb = 0
end