ORA-00907:从Java使用%通配符时缺少右括号

时间:2018-07-18 07:13:10

标签: java sql oracle select syntax-error

%子句中使用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:缺少右括号

2 个答案:

答案 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('%',?,'%'))