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