【问题标题】:Named Parameter with AND/OR in CONTAINS query is not workingCONTAINS 查询中带有 AND/OR 的命名参数不起作用
【发布时间】:2013-06-17 10:37:52
【问题描述】:

我正在使用 Oracle Text 在我的 Web 应用程序中进行搜索。我通过创建数据存储和索引来配置 Oracle Text。

这是我的查询

select * from PROFILE where CONTAINS(FIRST_NAME,:firstName OR :secondName,1)>0;

每次我得到以下异常ORA-00907: missing right parenthesis.

但是在用任何字符串替换 :firstName:secondName 后,它工作得很好。

它还可以与一个参数完美配合。
select * from PROFILE where contains(FIRST_NAME,:firstName,1)>0

上面的代码正在运行。但是添加OR :secondName后,结果是ORA-00907

【问题讨论】:

    标签: oracle hibernate oracle11g


    【解决方案1】:

    你应该更好地使用

    select * from PROFILE where CONTAINS(FIRST_NAME,:firstName ,1)>0  
    OR CONTAINS(FIRST_NAME,:secondName,1)>0
    

    【讨论】:

    • 这行不通,因为我认为 FIRST_NAME 的重复。它将显示错误ORA-29907: found duplicate labels in primary invocations
    【解决方案2】:

    Oracle Text documentation看来CONTAINS是一个定义为带有三个参数(最后一个可选)的常规函数​​:

    CONTAINS(
             [schema.]column,
             text_query    [VARCHAR2|CLOB]
             [,label       NUMBER])
    RETURN NUMBER;
    

    text_query 参数是一个常规字符串解释phrase。因此你应该写:

    select * from PROFILE where contains(FIRST_NAME, :search_query, 1)>0
    

    并将值 FOO OR BAR 绑定到变量 search_query,因为在这种情况下,OR 关键字不是 SQL 查询的一部分。

    【讨论】:

      猜你喜欢
      • 2013-10-22
      • 2019-05-19
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      相关资源
      最近更新 更多