【问题标题】:ORA-00909: invalid number of argumentsORA-00909: 参数数量无效
【发布时间】:2018-03-31 23:11:21
【问题描述】:

也许我放错了括号或逗号?我知道这是一个相当新手的问题,所以我提前道歉。我最初有这个代码:

es3.last_name || ', ' ||SUBSTR(es3.first_name,1,1)

但是 es3 是一个左外连接,所以所有的空白都显示','所以我在下面尝试了这个并且得到了错误

ORA-00909: 参数数量无效

NVL(es3.last_name, ' ' , es3.last_name || ', ' ||SUBSTR(es3.first_name,1,1))

谢谢!

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    来自文档:

    Oracle/PLSQL 中 NVL 函数的语法是:

    NVL( string1, replace_with )

    您正在为其提供 3 个参数,因此会出现错误消息。我相信你想要这个:

    CASE WHEN es3.last_name IS NULL
         THEN ''
         ELSE es3.last_name || ', ' ||SUBSTR(es3.first_name,1,1)
    END
    

    【讨论】:

    • 谢谢亚伦,这成功了!我什至没有考虑过CASE。我尝试投票,但我的代表太低了:(感谢您的帮助和其他所有人!
    【解决方案2】:

    NVL 只能有两个参数

    NVL(String, Value )
    

    所以当字符串为空时,上面的函数将返回'Value'。当字符串不为空时,'String' 本身。

    使用 NVL2。 NVL2 可以有三个参数

    NVL2(String, Value_when_not_null, Value_When_Null)
    

    所以当 'String' 不为空时,它返回第二个参数。当 String 为 null 时,它返回第三个参数。

    所以你的功能应该是

    NVL2(es3.last_name||es3.first_name , es3.last_name||','||es3.first_name, ' ')
    

    【讨论】:

    • 它似乎仍然在带回空逗号中的逗号......不过,我感谢您的帮助,谢谢!是不是因为逗号是独立的?
    • 不是因为逗号。您的案例必须使用 NVL2 而不是 NVL。
    【解决方案3】:

    你必须只有两个参数

    nvl 函数

    如果es3.last_name 为空,则NVL(es3.last_name,'Özhan') 中的类似返回Özhan

    即问题源于有两个以上的论点。

    在问题中有问题的部分是..' ' ,..

    NVL(es3.last_name, ' ' , es3.last_name || ', ' ||SUBSTR(es3.first_name,1,1))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-02
      • 2018-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      相关资源
      最近更新 更多