为什么表达' I_VALUE'不能用作Function中的赋值目标

时间:2016-07-21 05:35:40

标签: oracle function plsqldeveloper

我在oracle中创建了一个函数,但它在编译期间抛出了错误。

 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;

在编译期间,函数我收到以下错误

错误(7,1):PL / SQL:忽略语句 错误(7,1):PLS-00363:表达式&#39; I_VALUE&#39;不能用作任务目标

1 个答案:

答案 0 :(得分:3)

除非另外指定为OUT或IN OUT,否则输入参数。

有一个试图改变传递给它的参数的函数是不好的做法。这通常是程序的目的。

IN OUT或OUT参数不能传递给它的常量/文字。根据定义,它们必须是变量。