Witam,
Na początku zaznaczę, że właśnie uczę się tego języka i mam problem z funkcjami i procedurami. Problem jest bardzo podobny, ponieważ, w przypadku poniższej procedury, chciałbym aby do tabeli faktury i kolumny o nazwie f_kara_za_zwloke dodawana byla obliczona kwota (jak ponizej), ale tylko w przypadku gdy faktura nie jest oplacona (warunek if). Procedura dodaje niestety do wszystkich krotek jedną i tę samą kwotę. Proszę o wskazówki, gdzie leży przyczyna błędu.
CREATE OR REPLACE PROCEDURE uaktualnij_faktury IS
BEGIN
FOR c_rec IN (SELECT * FROM faktury) LOOP
IF(c_rec.f_czy_zaplacona = 'N') THEN
UPDATE faktury
SET f_kara_za_zwloke = (to_date('01-01-2008', 'DD-MM-YYYY')-c_rec.f_data_platnosci)*0.001;
END IF;
END LOOP;
END uaktualnij_faktury;
W przypadku funkcji jest podobnie, gdyż chciałbym, aby wyznaczała dla każdego id_faktury kwotę za wszystkie produkty z danej faktury. W wyniku otrzymuje jednak kwotę dla pierwszej faktury ale we wszystkich krotkach.
CREATE OR REPLACE FUNCTION kwota_faktury(f_id_faktury NUMBER) RETURN NUMBER IS
CURSOR temp IS
SELECT SUM(round(((p_cena_jednostkowa*p_stawka_vat)+p_cena_jednostkowa)*p_ilosc, 2))
FROM faktury, pozycje WHERE f_id_faktury = p_f_id_faktury
GROUP BY f_id_faktury;
v_id faktury.f_id_faktury%type;
v_kwota_faktury NUMBER;
BEGIN
OPEN temp;
LOOP
FETCH temp INTO v_kwota_faktury;
RETURN v_kwota_faktury;
EXIT WHEN temp%NOTFOUND;
END LOOP;
CLOSE temp;
END kwota_faktury;
Z góry dzięki za pomoc