以下查询在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绑定变量运行?
MATCH_RECOGNIZE我在带有一些 CTE 的查询中使用函数。当我运行查询时,出现以下错误:
SQL 编译错误:在此上下文中不支持 MATCH_RECOGNIZE。
在我的查询中,MATCH_RECOGNIZE 之前和之后有几个 CTE,部分如下。
WITH cte1 AS (
SELECT *
FROM dataset
WHERE ID IS NOT NULL AND STATUS IS NOT NULL ),
cte2 AS (
SELECT *
FROM cte1
QUALIFY FIRST_VALUE(STATUS) OVER (PARTITION BY ID ORDER BY CREATED_AT) = 'created' )
mr as (
SELECT *
FROM cte2
MATCH_RECOGNIZE (
PARTITION BY ID
ORDER BY CREATED_AT
MEASURES MATCH_NUMBER() AS mn,
MATCH_SEQUENCE_NUMBER AS msn
ALL ROWS PER MATCH
PATTERN (c+m+)
DEFINE
c AS status='created' …Run Code Online (Sandbox Code Playgroud) sql common-table-expression sql-view snowflake-cloud-data-platform match-recognize