Dodanie kolumny do raportu

0

Cześć,

Mam problem z przerobieniem jednego zapytania i nie mam pojęcia o co kaman i już chwilę się z tym męczę. To zapytanie Tworzy raport i moim zadaniem było dodanie jednej kolumny.Poniżej komantarze co dodałem do pierwotnego zapytania. Wywala się w tym miejscu w którym dodałem blok zagnieżdżony ale nie wiem dlaczego... Gdy próbuje to puścić na piechotę wynik który jest zwracany jest wynikiem oczekiwanym. Wcześniej robiłem to za pomocą kursora ale efekt był ten sam. Dziękuję z góry za wszelkie sugestie! Pozdrawiam!

DECLARE
vFrmIdStart number;
---------------------------------ZMienna poniżej dodana w tym miejscu----------------------------
v_dok_numer_sort varchar2(30);
------------------------------------------------------------------------------------------------- 
BEGIN --1.
 vFrmIdStart := eap_globals.odczytaj_firme;
 
BEGIN --2.
eap_globals.USTAW_konsolidacje('T');
 
END;
 
 
ROLLBACK;
 
DECLARE vFrmNazwa varchar2(100);
 
vSprCzyRozlNaBO number;
 
v_kwotaWNnaBO number;
 
v_kwotaMAnaBO number;
 
vSprCzyRozlNaKOR number;
 
v_kwotaWNnaKOR number;
 
v_kwotaMAnaKOR number;
 
BEGIN
ROLLBACK;
 
 
DELETE
FROM bctt_wyniki_raportow;
 
-- zwykłe dokumenty
FOR x in
  (SELECT *
   FROM
  (SELECT KLD_NIP,
          KLD_KL_KOD,
             KLD_NAZWA,
             roz_numer,
             roz_kl_kod,
          dok_id ,
             sum(pl_kwota_wn)wn ,
             sum(pl_kwota_ma)ma ,
          A ,
             frm_nazwa,
          knt_pelny_numer,
             nvl(min(data_wymagalnosci), nvl(min(pl_data_wymagalnosci), min(dok_data_operacji))) data_wymagalnosci ,
          CASE
              WHEN a = ' ' THEN DOK_DATA_WYSTAWIENIA
              ELSE NULL
          END dok_DATA_WYSTAWIENIA -- , (select listagg(um_numer,';') WITHIN group(order by um_numer) from knt_umowy where um_data_waznosci >= to_date(:data_wym_do,'YYYY-MM-DD') and um_kl_kod = KLD_KL_KOD) umowa
 ,
 
     (SELECT um_numer
      FROM knt_umowy
      WHERE um_id = dok_um_id) umowa
   FROM
     (SELECT KLD_NIP,
             KLD_KL_KOD,
             KLD_NAZWA,
                roz_numer,
                pl_kwota_wn,
                pl_kwota_ma,
             frm_nazwa,
                knt_pelny_numer,
                pl_Data_wymagalnosci,
                roz_kl_kod,
             dok_id ,
 
        (SELECT dok_data_operacji
         FROM kgt_dokumenty
         WHERE dok_id = pl_dok_id_org) dok_data_operacji ,
             CASE
                 WHEN roz_numer =
                        (SELECT dok_numer_wlasny
                         FROM kgt_dokumenty
                         WHERE dok_id = pl_dok_id_org) THEN pl_data_wymagalnosci
                ELSE NULL
             END data_wymagalnosci ,
             PL_PL_ID_BO,
             DOK_FRM_ID --, null A
 ,
 
        (SELECT NAPRZOD2.nap_olek2.zapis_zrodlowy_roz(PL_PL_ID_BO, DOK_FRM_ID)
         FROM dual) A ,
                DOK_DATA_WYSTAWIENIA ,
                dok_um_id
      FROM kgt_dokumenty,
              nzt_platnosci,
              nzt_rozrachunki,
              ckk_klienci_dane,
           eat_firmy,
           kg_konta
      WHERE pl_roz_id = roz_id
        AND pl_dok_id = dok_id
        AND dok_frm_id = frm_id
        AND pl_knt_id = knt_id
        AND roz_kl_kod = KLD_KL_KOD
        AND knt_pelny_numer like :konto --and roz_kl_kod = 134
 
        AND pl_f_anulowana = 'N'
        AND pl_f_rozliczona = 'N'
        AND roz_typ = 'N'
        AND kld_kl_kod not in
          (SELECT frm_kl_id
           FROM eat_firmy
           WHERE frm_opis NOT like 'M'
             AND frm_id != '0') -- ('1','5700','5900','205','6542','8542','939','8367','2053','511','117','8544','8541','8543','10694','10700','10701','10697')
 
        AND frm_nazwa not like '%NIZAN%' --AND FRM_ID NOT IN (300171)
 
        AND kld_zatwierdzony = 'T'
        AND kld_f_aktualne = 'T'
        AND to_Char(dok_data_zaksiegowania, 'YYYY') = :rok )
   GROUP BY KLD_NIP,
            roz_numer,
            A,
            KLD_KL_KOD,
               KLD_NAZWA,
               roz_kl_kod,
            dok_id,
               frm_nazwa,
               knt_pelny_numer,
               dok_data_wystawienia,
               dok_um_id)
   WHERE data_wymagalnosci BETWEEN to_date(nvl(:data_wym_od, '1900-01-01'), 'YYYY-MM-DD') AND to_date(nvl(:data_wym_do, '2999-01-01'), 'YYYY-MM-DD') ) LOOP -- 02 sprawdzenie czy czasem nie rozliczone na BO
BEGIN
SELECT count(1) INTO vSprCzyRozlNaBO
FROM
  (SELECT sum(pl_kwota_wn) sum_wn,
          sum(pl_kwota_ma) sum_ma,
          sum(dok_kwota) sum_dok
   FROM kgt_dokumenty,
     nzt_platnosci,
        nzt_rozrachunki,
     eat_firmy
   WHERE roz_kl_kod = x.roz_kl_kod
  AND pl_dok_id = dok_id
  AND roz_frm_id=frm_id
  AND frm_nazwa=x.frm_nazwa
  AND pl_roz_id = roz_id
  AND roz_numer = x.roz_numer
  AND pl_f_anulowana = 'N'
  AND pl_f_rozliczona = 'T')
WHERE sum_wn = sum_ma
  AND sum_dok=sum_wn
  AND x.wn=sum_wn
  AND sum_wn>0; -- korekty AS 2016-05-16
 
 
EXCEPTION WHEN no_data_found THEN vSprCzyRozlNaBO := 0;
 
END;
----------------------------------Ten blok dodałem---------------------------- 
BEGIN
SELECT knt_pelny_numer INTO v_dok_numer_sort
FROM kgt_ksiegowania ks,
  kg_konta ko,
  nzt_rozrachunki roz,
  kgt_dokumenty dok
WHERE ks.ks_knt_ma = ko.knt_id
  AND dok.dok_id = ks.ks_dok_id
  AND dok_numer_sort = x.roz_numer
ORDER BY knt_pelny_numer DESC FETCH FIRST 1 ROW ONLY;
 
END; 
DBMS_OUTPUT.PUT_LINE(v_dok_numer_sort);
 
DBMS_OUTPUT.PUT_LINE(x.roz_numer);
----------------------------------------------------------------------------- 
IF vSprCzyRozlNaBO = 0 THEN
INSERT INTO bctt_wyniki_raportow (wr_pole_7_t, wr_pole_1_t, wr_pole_2_t, wr_pole_3_t, wr_pole_1_l, wr_pole_2_l, wr_pole_4_t, wr_pole_5_t, wr_pole_1_d, wr_pole_2_d, WR_POLE_6_t, wr_pole_8_t , wr_pole_16_t)
VALUES (x.KLD_NIP, x.KLD_KL_KOD, x.KLD_NAZWA, x.roz_numer, x.wn, x.ma, x.frm_nazwa, x.knt_pelny_numer, x.data_wymagalnosci,x.dok_DATA_WYSTAWIENIA,X.A, x.umowa,v_dok_numer_sort);
 
END IF;
 
END LOOP;
 
END;
 
END;
 
/
--------------------------------------------------------------------- 
KOSOLA ZWARACA:

602-02-C852-000
FVCU/018/01/2022
602-02-C287-000
FVCU/006/04/2022
602-02-C587-000
FVCU/191/06/2022
 
/Całe zapytanie...
 
Error report -
ORA-01403: nie znaleziono danych
ORA-06512: przy linia 107
01403. 00000 -  "no data found"
*Cause: No data was found from the objects.
*Action:   There was no data from the objects which may be due to end of fetch.

0

A co w tym niejasnego:

ORA-01403: nie znaleziono danych

Zapytanie nić nie zwraca.

I zupełnie nie mam pojęcia co to zapytanie ma robić w tym miejsu.

0

Za pomocą DBMS wyrzuca mi dane:

DBMS_OUTPUT.PUT_LINE(v_dok_numer_sort);

DBMS_OUTPUT.PUT_LINE(x.roz_numer);

KOSOLA ZWARACA:

602-02-C852-000
FVCU/018/01/2022
602-02-C287-000
FVCU/006/04/2022
602-02-C587-000
FVCU/191/06/2022

To zapytanie ma doczytywać w każdym przejściu wartość z innej tabeli nie da się zmodyfikować tego zapytania w głównym select ponieważ jedne z warunków wyklucza wyszukanie tej kolumny.
Dopisałem nvl w bloku zagnieżdźonym ale dalej mam ten sam błąd...

1

Tu masz przykład jak sobie poradzić z No_DATA_FOUIND: https://stackoverflow.com/questions/1256112/pl-sql-block-problem-no-data-found-error

0

Zmodyfikowałem tak jak w linku ale z kolei teraz wywala się na end loop;
i daje taki komunikat:

Error report -
ORA-06550: linia 125, kolumna 8:
PLS-00103: Napotkano symbol ";" gdy oczekiwano jednego z następujących:

   loop
Symbol "loop" zostało podstawione za ";" w celu kontynuacji.
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

Ehhh nie rozumiem o co chodzi :/ Nie można zagnieżdżać w jednym bolu dwóch równorzędnych bloków?


DECLARE 
vFrmIdStart number;
v_dok_numer_sort varchar2(30);

BEGIN --1.

vFrmIdStart := eap_globals.odczytaj_firme;

begin --2.
eap_globals.USTAW_konsolidacje('T');
end;

rollback;

declare
vFrmNazwa varchar2(100);
vSprCzyRozlNaBO number;
v_kwotaWNnaBO number;
v_kwotaMAnaBO number;
vSprCzyRozlNaKOR number;
v_kwotaWNnaKOR number;
v_kwotaMAnaKOR number;


begin


rollback;


delete from bctt_wyniki_raportow;

-- zwykłe dokumenty
for x in (

    select * from (
    select KLD_NIP, KLD_KL_KOD, KLD_NAZWA, roz_numer, roz_kl_kod, dok_id
    , sum(pl_kwota_wn)wn
    , sum(pl_kwota_ma)ma
    , A
    , frm_nazwa, knt_pelny_numer, nvl(min(data_wymagalnosci), nvl(min(pl_data_wymagalnosci),min(dok_data_operacji))) data_wymagalnosci
    , CASE  WHEN a = ' ' THEN DOK_DATA_WYSTAWIENIA  ELSE null END dok_DATA_WYSTAWIENIA 
--    , (select listagg(um_numer,';') WITHIN group(order by um_numer) from knt_umowy where um_data_waznosci >= to_date(:data_wym_do,'YYYY-MM-DD') and um_kl_kod = KLD_KL_KOD) umowa
    , (select um_numer from knt_umowy where um_id = dok_um_id) umowa
    from 
    (
    select KLD_NIP, KLD_KL_KOD, KLD_NAZWA, roz_numer, pl_kwota_wn, pl_kwota_ma, frm_nazwa, knt_pelny_numer, pl_Data_wymagalnosci, roz_kl_kod, dok_id 
    , (select dok_data_operacji from kgt_dokumenty where dok_id = pl_dok_id_org) dok_data_operacji
    , case when  roz_numer = (select dok_numer_wlasny from kgt_dokumenty where dok_id = pl_dok_id_org) then pl_data_wymagalnosci       
    else null end data_wymagalnosci
    ,PL_PL_ID_BO,DOK_FRM_ID
    --, null A
    ,(select NAPRZOD2.nap_olek2.zapis_zrodlowy_roz(PL_PL_ID_BO,DOK_FRM_ID) from dual)  A
    ,DOK_DATA_WYSTAWIENIA
    , dok_um_id
    from kgt_dokumenty, nzt_platnosci, nzt_rozrachunki, ckk_klienci_dane, eat_firmy, kg_konta
    where pl_roz_id = roz_id
    and pl_dok_id = dok_id
    and dok_frm_id = frm_id
    and pl_knt_id = knt_id
    and roz_kl_kod = KLD_KL_KOD
    and knt_pelny_numer like :konto
    --and roz_kl_kod = 134
    and pl_f_anulowana = 'N'
    and pl_f_rozliczona = 'N'
    and roz_typ = 'N'
    and kld_kl_kod not in
    (select frm_kl_id from eat_firmy where frm_opis NOT like 'M' and frm_id != '0')
    -- ('1','5700','5900','205','6542','8542','939','8367','2053','511','117','8544','8541','8543','10694','10700','10701','10697')
    and frm_nazwa not like '%NIZAN%'
    --AND FRM_ID NOT IN (300171)
    and kld_zatwierdzony = 'T'
    and kld_f_aktualne = 'T'
    and to_Char(dok_data_zaksiegowania,'YYYY') = :rok
    ) 
    group by KLD_NIP, roz_numer,A, KLD_KL_KOD, KLD_NAZWA, roz_kl_kod, dok_id, frm_nazwa, knt_pelny_numer,dok_data_wystawienia, dok_um_id
    
    )
    where data_wymagalnosci between to_date(nvl(:data_wym_od,'1900-01-01'),'YYYY-MM-DD') and to_date(nvl(:data_wym_do,'2999-01-01'),'YYYY-MM-DD')


)
loop

-- 02 sprawdzenie czy czasem nie rozliczone na BO
begin
 select count(1) into vSprCzyRozlNaBO from (
select sum(pl_kwota_wn) sum_wn, sum(pl_kwota_ma) sum_ma,sum(dok_kwota) sum_dok
 from kgt_dokumenty, nzt_platnosci, nzt_rozrachunki ,eat_firmy
where roz_kl_kod = x.roz_kl_kod
  and pl_dok_id = dok_id
and roz_frm_id=frm_id
and frm_nazwa=x.frm_nazwa
  and pl_roz_id = roz_id
  and roz_numer = x.roz_numer
  and pl_f_anulowana = 'N'
  and pl_f_rozliczona = 'T')
 where sum_wn = sum_ma
and sum_dok=sum_wn
and x.wn=sum_wn
 and sum_wn>0; -- korekty AS 2016-05-16
exception when no_data_found then
vSprCzyRozlNaBO := 0;
end;
DBMS_OUTPUT.PUT_LINE(x.roz_numer);
    BEGIN
        SELECT knt_pelny_numer INTO v_dok_numer_sort
        FROM kgt_ksiegowania ks,
             kg_konta ko,
             nzt_rozrachunki roz,
             kgt_dokumenty dok
        WHERE ks.ks_knt_ma = ko.knt_id
          AND dok.dok_id = ks.ks_dok_id
          AND dok_numer_sort = x.roz_numer
        ORDER BY knt_pelny_numer DESC FETCH FIRST 1 ROW ONLY;
        
        
        EXCEPTION WHEN NO_DATA_FOUND THEN 
        v_dok_numer_sort := NULL;
        END;
        
        CASE -- outer CASE
         WHEN v_dok_numer_sort IS NULL THEN v_dok_numer_sort := 'Brak';
        end; 
    END;
DBMS_OUTPUT.PUT_LINE(v_dok_numer_sort);
--DBMS_OUTPUT.PUT_LINE(x.roz_numer);

if vSprCzyRozlNaBO = 0  then 
insert into bctt_wyniki_raportow
( wr_pole_7_t, wr_pole_1_t, wr_pole_2_t, wr_pole_3_t
, wr_pole_1_l, wr_pole_2_l
, wr_pole_4_t, wr_pole_5_t
, wr_pole_1_d
,wr_pole_2_d
,WR_POLE_6_t
, wr_pole_8_t 
,wr_pole_16_t
)
values
( x.KLD_NIP
, x.KLD_KL_KOD
, x.KLD_NAZWA
, x.roz_numer
, x.wn
, x.ma
, x.frm_nazwa
, x.knt_pelny_numer
, x.data_wymagalnosci
,x.dok_DATA_WYSTAWIENIA
,X.A
, x.umowa
,v_dok_numer_sort
);
end if;

end loop;
end;
/
--SELECT * FROM bctt_wyniki_raportow
1

No to może zacznij od podstaw i zajrzyj do dokumentacji jak to ma wyglądać. Stosowanie wzorca projektowego Kopiego Pejsta wymaga znajomości przynajmniej podstaw.
Tu masz przykład z kolegi GTP
screenshot-20230417101021.png

BEGIN
    SELECT knt_pelny_numer INTO v_dok_numer_sort
    FROM kgt_ksiegowania ks,
         kg_konta ko,
         nzt_rozrachunki roz,
         kgt_dokumenty dok
    WHERE ks.ks_knt_ma = ko.knt_id
      AND dok.dok_id = ks.ks_dok_id
      AND dok_numer_sort = x.roz_numer
    ORDER BY knt_pelny_numer DESC FETCH FIRST 1 ROW ONLY;
    
    
EXCEPTION WHEN NO_DATA_FOUND THEN 
        v_dok_numer_sort := NULL;
END;      
        
0

Ja zastosowałem coś takiego:

  BEGIN
        SELECT knt_pelny_numer INTO v_dok_numer_sort
        FROM kgt_ksiegowania ks,
             kg_konta ko,
             nzt_rozrachunki roz,
             kgt_dokumenty dok
        WHERE ks.ks_knt_ma = ko.knt_id
          AND dok.dok_id = ks.ks_dok_id
          AND dok_numer_sort = x.roz_numer
        ORDER BY knt_pelny_numer DESC FETCH FIRST 1 ROW ONLY;
        
        
        EXCEPTION WHEN NO_DATA_FOUND THEN 
        v_dok_numer_sort := NULL;
        END;
        
        CASE -- outer CASE
         WHEN v_dok_numer_sort IS NULL THEN v_dok_numer_sort := 'Brak';
        end; 
    END;

I możesz się śmiać z "Wzorca" - ale generalnie przypisuje mu 'Bark' i powinno hulać.

Gdy wykorzystałem Twoje @S4t przypisanie nulla dostaję inny błąd i to w ostatniej linii który sugeruje że się składnia nie zgadza :/

Error report -
ORA-06550: linia 158, kolumna 121:
PLS-00103: Napotkano symbol "end-of-file" gdy oczekiwano jednego z następujących:

Nie rozumiem.

1

A tak?

BEGIN
        SELECT knt_pelny_numer INTO v_dok_numer_sort
        FROM kgt_ksiegowania ks,
             kg_konta ko,
             nzt_rozrachunki roz,
             kgt_dokumenty dok
        WHERE ks.ks_knt_ma = ko.knt_id
          AND dok.dok_id = ks.ks_dok_id
          AND dok_numer_sort = x.roz_numer
        ORDER BY knt_pelny_numer DESC FETCH FIRST 1 ROW ONLY;
        
        
EXCEPTION WHEN NO_DATA_FOUND THEN 
  v_dok_numer_sort := ''Brak;
END;
 
0

Mam ten sam bład ale występuje na konću bloku zagniedżonego

Error report -
ORA-06550: linia 122, kolumna 8:
PLS-00103: Napotkano symbol ";" gdy oczekiwano jednego z następujących:

1 użytkowników online, w tym zalogowanych: 0, gości: 1