ORA-06502: PL/SQL: числовая ошибка или ошибка значения: ошибка преобразования символа в число в функции пакета
Я пытаюсь создать функцию, которая возвращает конвейерную таблицу с входными параметрами, такими как varchar2, date или number. Я пытаюсь ввести сумму как varchar2, потому что не могу обработать ее как число с запятой перед десятичными знаками. Вот тело моей функции пакета:
FUNCTION kreiraj_reprogram_rate (p_sifra_kupca VARCHAR2,
p_id_kartice_kupca NUMBER,
p_iznos_s_pdv VARCHAR2,
p_broj_rata NUMBER,
p_frekvencija_dospijeca NUMBER,
p_datum_dospijeca VARCHAR2,
p_datum_dokumenta VARCHAR2)
RETURN reprogram_rate_table
PIPELINED
IS
v_data reprogram_rate_rec;
v_user VARCHAR2 (200) := mc__secure_context.get_context_username ();
v_iznos_rate NUMBER;
v_broj_rate NUMBER;
v_zadnja_rata NUMBER;
v_datum_dokumenta DATE;
v_datum_dospijeca DATE;
BEGIN
write_log_table ('TEST','p_iznos_s_pdv: '|| to_number(p_iznos_s_pdv));
v_datum_dospijeca := TO_DATE (p_datum_dospijeca, 'dd.mm.yyyy');
v_datum_dokumenta := TO_DATE (p_datum_dokumenta, 'dd.mm.yyyy');
v_iznos_rate := ROUND (to_number(p_iznos_s_pdv) / p_broj_rata, 2);
v_zadnja_rata :=
p_iznos_s_pdv - ROUND ((p_broj_rata - 1) * v_iznos_rate, 2);
v_broj_rate := 1;
FOR r IN 1 .. p_broj_rata
LOOP
IF v_broj_rate = p_broj_rata
THEN
v_data.osnovica := ROUND ((v_zadnja_rata / 1.25), 2);
v_data.pdv := ROUND (v_zadnja_rata * 0.2, 2);
v_data.ukupno := v_zadnja_rata;
ELSE
v_data.osnovica := ROUND ((v_iznos_rate / 1.25), 2);
v_data.pdv := ROUND (v_iznos_rate * 0.2, 2);
v_data.ukupno := ROUND (v_iznos_rate, 2);
END IF;
v_data.sifra_kupca := p_sifra_kupca;
v_data.kartica_kupca := p_id_kartice_kupca;
v_data.broj_rate := v_broj_rate;
v_data.datum_dokumenta := v_datum_dokumenta;
v_data.datum_dospijeca := v_datum_dospijeca;
PIPE ROW (v_data);
v_broj_rate := v_broj_rate + 1;
v_datum_dospijeca :=
CASE
WHEN p_frekvencija_dospijeca = 1
THEN
ADD_MONTHS (v_datum_dospijeca, 1)
WHEN p_frekvencija_dospijeca = 3
THEN
ADD_MONTHS (v_datum_dospijeca, 3)
WHEN p_frekvencija_dospijeca = 6
THEN
ADD_MONTHS (v_datum_dospijeca, 6)
WHEN p_frekvencija_dospijeca = 12
THEN
ADD_MONTHS (v_datum_dospijeca, 12)
END;
END LOOP;
END kreiraj_reprogram_rate;
И ошибка говорит, что ошибка находится в первой строке write_log_table, где я пытаюсь преобразовать значение 4159,57 в число.
Я попытался выбрать to_number('4159,57') из двойного в SQL-разработчике, и он работает нормально, поэтому я не могу понять, в чем проблема.
Может кто поможет?
Спасибо.