帮助解决“表达式作为分配目标”错误

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。

【讨论】:

以上是关于帮助解决“表达式作为分配目标”错误的主要内容,如果未能解决你的问题,请参考以下文章

IBAction 推送视图控制错误-“预期表达式”

需要帮助解决函数haskell正则表达式操作函数[关闭]

查询表达式中的语法错误(缺少运算符),Oledb UPDATE 语句

需要帮助从 JavaScript 中的字符串中提取数字

ORDER BY 子句中的语法错误和条件表达式中的数据不匹配

电子邮件错误帮助我解决语法错误