在CONTAINS查询中使用AND / OR命名的参数不起作用

时间:2013-06-20 14:10:57

标签: oracle hibernate oracle11g

我正在使用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

2 个答案:

答案 0 :(得分:1)

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查询的一部分。

答案 1 :(得分:0)

你最好使用

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

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