2016-07-21 32 views
0

Ich habe eine Funktion in Oracle erstellt, aber es wirft den Fehler während der Kompilierung.Warum Ausdruck 'I_VALUE' kann nicht als Zuweisungsziel in Funktion

create or replace FUNCTION Get_Rounded_Value(i_Value NUMBER, i_Round_Type Varchar2, i_Round_Para NUMBER) RETURN number 
DETERMINISTIC 
IS 
v_Final_Value NUMBER(22,4); 
BEGIN 
v_Final_Value := 0; 
i_Value := NVL(i_Value,0); 
if i_Round_Type = 'D' then 
v_Final_Value := Trunc(i_Value,i_Round_Para); 
elsif i_Round_Type = 'U' then 
v_Final_Value := Ceil(i_Value * Power(10, i_Round_Para))/Power(10, i_Round_Para); 
ELSIF i_Round_Type = 'R' then 
v_Final_Value := Round(i_Value, i_Round_Para); 
ELSIF i_Round_Type = 'A' then 
v_Final_Value := Round(i_Value, i_Round_Para); 
    if abs(v_final_value - i_value) < 5 * power(10, (-1*i_Round_Para) - 1)   then 
     v_Final_Value := v_Final_Value + 5 * power(10, (-1*i_Round_Para) - 1); 
    ELSIF abs(v_final_value - i_value) = 5 * power(10, (-1*i_Round_Para) -  1) then 
    v_Final_Value := v_Final_Value - 5 * power(10, (-1*i_Round_Para) - 1); 
END IF; 
ELSIF i_Round_Type = 'B' then 
v_Final_Value := Ceil(i_Value * Power(10, i_Round_Para))/Power(10, i_Round_Para); 
if abs(v_final_value - i_value) <= 5 * power(10, (-1*i_Round_Para) - 1) then 
    v_Final_Value := v_Final_Value - 5 * power(10, (-1*i_Round_Para) - 1); 
END IF; 
    ELSIF i_Round_Type = 'C' then 
v_Final_Value := Trunc(i_Value,i_Round_Para); 
if abs(v_final_value - i_Value) >= 5 * power(10, (-1*i_Round_Para) - 1) then 
    v_Final_Value := v_Final_Value + 5 * power(10, (-1*i_Round_Para) - 1); 
END IF; 
end if; 
    Return NVL(v_Final_Value,0); 
    END; 

Während der Kompilierung der Funktion ich habe die folgenden Fehler

Fehler (7,1): PL/SQL: Statement ignoriert Fehler (7,1): PLS-00363: expression ‚I_VALUE 'kann nicht als Zuweisungsziel verwendet werden

Antwort

3

Parameter werden eingegeben, sofern nicht anders als OUT oder IN OUT angegeben.

Es ist eine schlechte Übung, eine Funktion zu haben, die versucht, die übergebenen Parameter zu ändern. Dies ist in der Regel der Zweck eines Verfahrens.

Einem IN OUT- oder OUT-Parameter können keine Konstanten/Literale übergeben werden. Sie müssen definitionsgemäß Variablen sein.