什么是逃脱的正确方法?使用Oracle 12c MATCH_RECOGNIZE时,JDBC PreparedStatement中的字符?

Luk*_*der 6 java oracle jdbc match-recognize

以下查询在Oracle 12c中是正确的:

SELECT *
FROM dual
MATCH_RECOGNIZE (
  MEASURES a.dummy AS dummy
  PATTERN (a?)
  DEFINE a AS (1 = 1)
)
Run Code Online (Sandbox Code Playgroud)

但它不能通过JDBC工作,因为?用作正则表达式字符的字符,而不是绑定变量.

什么是逃避?通过JDBC 的正确方法,假设我想将其作为PreparedStatement绑定变量运行?

注意:

Jim*_*son 5

这在文档中明确说明

https://docs.oracle.com/database/121/JJDBC/apxref.htm#CHECHCJH

MATCH_RECOGNIZE条款

的?character在Oracle Database 11g及更高版本的MATCH_RECOGNIZE子句中用作标记.由于JDBC标准定义了?作为参数标记的字符,JDBC驱动程序和服务器SQL引擎无法区分同一令牌的不同用途.

在早期版本的JDBC Driver中,如果要解释?如果字符不是MATCH_RECOGNIZE标记而不是参数标记,则必须使用Statement而不是PreparedStatement并禁用转义处理.但是,从Oracle Database 12c第1版(12.1.0.2)开始,您可以在使用时使用"{\ ...}"语法?字符,以便JDBC驱动程序不将其作为参数标记处理,并允许SQL引擎处理它.