ORA-00909:参数数量无效

时间:2017-10-19 19:55:22

标签: sql oracle

也许我假设括号错误或逗号错误?我知道这是一个相当新手的问题,所以我提前道歉。我原来有这个代码:

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

但是es3是一个Left Outer Join,所以所有的空白都显示了','所以我在下面尝试了这个并且得到了ERROR

  

ORA-00909:参数数量无效

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

谢谢!

3 个答案:

答案 0 :(得分:2)

来自文档:

  

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

答案 1 :(得分:1)

NVL只能有两个参数

NVL(String, Value )

因此上述功能将返回' Value'当string为null时。并且' String'当string不为null时自己。

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

NVL2(String, Value_when_not_null, Value_When_Null)

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

所以你的功能应该是

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

答案 2 :(得分:1)

你必须只有两个参数
  

nvl函数

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

会返回es3.last_name

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

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

  

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