为啥表达式'I_VALUE'不能用作函数中的赋值目标
Posted
技术标签:
【中文标题】为啥表达式\'I_VALUE\'不能用作函数中的赋值目标【英文标题】:why expression 'I_VALUE' cannot be used as an assignment target in Function为什么表达式'I_VALUE'不能用作函数中的赋值目标 【发布时间】:2016-07-21 05:35:39 【问题描述】:我在 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:表达式“I_VALUE”不能用作分配目标
【问题讨论】:
【参考方案1】:除非另外指定为 OUT 或 IN OUT,否则参数都是输入的。
拥有一个尝试更改传递给它的参数的函数是不好的做法。这通常是程序的目的。
一个 IN OUT 或 OUT 参数不能有常量/文字传递给它。根据定义,它们必须是变量。
【讨论】:
以上是关于为啥表达式'I_VALUE'不能用作函数中的赋值目标的主要内容,如果未能解决你的问题,请参考以下文章