Oracle错误 - ORA-00936:缺少具有替换功能的表达式

时间:2013-07-08 09:20:53

标签: oracle oracle11g

我正在尝试在用户搜索احمد时进行查询而不使用 Hamza(ء),并使用hamzam返回结果并且结果为hamza如下:

select * 
  from EMPLOYEES  
 Where (Replace(Replace(Replace(first_name, 'ا', 'أ'), 'و','ؤ'), 'ي', 'ى') 
        like (Replace(Replace(Replace(['احمد'], 'ا', 'أ'), 'و','ؤ'),'ى','ي')

但我得到例外:Oracle error - ORA-00936: missing expression

请告知如何修复它。

2 个答案:

答案 0 :(得分:1)

你错过了2个括号:

SELECT * 
  FROM EMPLOYEES  
 WHERE (REPLACE(REPLACE(REPLACE(first_name, 'ا', 'أ'), 'و','ؤ'), 'ي', 'ى'))
        LIKE (REPLACE(REPLACE(REPLACE(['احمد'], 'ا', 'أ'), 'و','ؤ'),'ى','ي'))

答案 1 :(得分:0)

ORA-00936: missing expression始终表示语法错误。您发布的代码中有几个灯笼裤。

  1. )的数量必须与(的数量相匹配。
  2. [不是Oracle SQL中的可识别字符。目前还不清楚你想要用它们实现什么,所以很难知道如何建议你解决这个问题,但是你需要以某种方式摆脱它们。
  3. ,(构造错误。
  4. 或者说明显的灯笼裤。因为当我尝试更正您的代码时,编辑器改变了我的更改,例如)转回(。当我将它粘贴到ASCII编辑器中时,我看到了......

    Replace(Replace(Replace(first_name, '?', '?'), '?','?'), '?', '?') 
    

    ...它给出了)的正确计数和REPLACE()调用的正确嵌套。

    假设:某种字符集误译。所以问题是,SO编辑器是介绍这种腐败还是你在客户端遇到这种情况?

    顺便提一下,ASCII操作的右侧是

    REPLACE(REPLACE(REPLACE(['????'], '?', '?'), '?','?'),'?','?'))
    

    所以那些流氓[ ]是真实的(我认为),你必须删除它们。鉴于其他“错误”可能只是SO编辑器的假象,我认为那些方括号是你应该关注的事情。