帮助解决“表达式作为分配目标”错误
Posted
技术标签:
【中文标题】帮助解决“表达式作为分配目标”错误【英文标题】:Help with "Expression as an assignment target" error 【发布时间】:2011-06-30 13:55:18 【问题描述】:这里有一个简单的问题,我正在编写一个函数,但我在设置我的第一个 if 语句时遇到了问题,我的尝试如下,但我不断收到“表达式不能用作赋值目标”错误行“类型:= CE;"和“类型:= UG;”我确定有一个快速解决方案......有人知道吗?
CREATE OR REPLACE FUNCTION SCHEMA1."FUNCTION1" ( Id IN VARCHAR2,
term IN VARCHAR2,
Type IN VARCHAR2 default NULL )
RETURN VARCHAR2 IS
BEGIN
IF Type IS NULL
THEN
IF SUBSTR(term,5,6) = 'Q'
THEN
Type := 'CE';
ELSE
Type := 'UG';
END IF;
END IF;
........
【问题讨论】:
"Type" 这里是一个输入参数。如果您要更改它,请将其设为 in out 参数。 好的,简单的解决方案,很有意义。谢谢! 【参考方案1】:声明一个在函数中使用的保持变量?
CREATE OR REPLACE FUNCTION SCHEMA1."FUNCTION1" ( Id IN VARCHAR2,
term IN VARCHAR2,
Type IN VARCHAR2 default NULL )
RETURN
VARCHAR2
IS
iType VARCHAR2;
BEGIN
iType := Type;
IF iType IS NULL
THEN
IF SUBSTR(term,5,6) = 'Q'
THEN
iType := 'CE';
ELSE
iType := 'UG';
END IF;
END IF;
........
【讨论】:
好的,运行良好,谢谢!不过后续问题......我只是好奇,为什么这会起作用,因为据我所见,它实际上在做同样的事情。只是将某些内容分配给参数与将某些内容分配给变量之间的区别吗? 我不是 Oracle 专家,所以这就是我过去对自己合理化的方式:Oracle 函数的参数表现得好像它们是对“对象”的引用传入。通过为参数分配一个新值,您正在为用作输入的任何内容分配一个新值。但是输入可能是两个字段的连接,因此无法确定应该更新什么。我知道这是一个非常模糊的解释,也许有更好的人会为你回答这个问题:)【参考方案2】:在我看来,您将“类型”作为参数传递,然后尝试分配给它。您是否打算根据 Term 返回“CE”/“UG”?如果是这样,请引入一个新变量或将 Type := 更改为 RETURN。
【讨论】:
以上是关于帮助解决“表达式作为分配目标”错误的主要内容,如果未能解决你的问题,请参考以下文章
查询表达式中的语法错误(缺少运算符),Oledb UPDATE 语句