在%
子句中使用LIKE
通配符之前,遇到问题的查询工作正常。 :-
这很好(从Java打印):-
select acc.*, service.*
from com_accounts acc
left join com_subscriptions service on acc.cust_id = service.cust_id
where 1=1 and UPPER(acc.first_name) LIKE UPPER(?)
这引发了错误(从Java代码打印):-
select acc.*, service.*
from com_accounts acc
left join com_subscriptions service on acc.cust_id = service.cust_id
where 1=1 and UPPER(acc.first_name) LIKE UPPER('%'?'%')
java.sql.SQLSyntaxErrorException:ORA-00907:缺少右括号
答案 0 :(得分:4)
使用此查询,您将只有三个连续的字符串,并且它们之间没有运算符,正如您所看到的,这不是Oracle中的合法语法。使用||
运算符将它们串联应该可以解决问题:
select acc.*, service.*
from com_accounts acc
left join com_subscriptions service on acc.cust_id = service.cust_id
where 1=1 and UPPER(acc.first_name) LIKE UPPER('%' || ? || '%')
-- Here --------------------------------------------^----^
答案 1 :(得分:1)
Mayber使用CONCAT
功能可以解决您的答案。
select acc.*, service.*
from com_accounts acc
left join com_subscriptions service on acc.cust_id = service.cust_id
where 1=1 and UPPER(acc.first_name) LIKE UPPER(CONCAT('%',?,'%'))