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绑定变量运行?
这在文档中明确说明
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引擎处理它.
| 归档时间: |
|
| 查看次数: |
502 次 |
| 最近记录: |