sql - SQL 查询错误 REGEXP_INSTR 表达式中带有括号
问题描述
我的查询有问题,正则表达式中有括号。我的编辑器将表达式中的括号与表达式之外的另一个括号相关联。
我想知道这是否导致我收到 ORA-00907:缺少右括号错误,或者是否是其他原因?
WITH Stats AS
(
SELECT
column1, column2
FROM TABLE1
UNION ALL
SELECT
column1, column2
FROM TABLE2
),
Newest AS
(
SELECT s.*
ROW_NUMBER() OVER
(
PARTITION BY
column1, column2
REPLACE(REPLACE('%(param)s', '5', '6'), '7', '8')
ORDER BY colum2 DESC
) PRIORITY
CASE WHEN REGEXP_INSTR('%(param)s', '/(//')
> 0 AND REGEXP_LIKE(column1, '%(param)s')
THEN 'Y' END PARAM_MATCH,
CASE WHEN REGEXP_INSTR('%(param)s', '/(//')
= 0 AND column1 LIKE '%(param)s' THEN 'Y'
END LIKE_MATCH,
FROM Stats s
WHERE (REGEXP_INSTR('%(param)s', '/(//') > 0
AND REGEXP_LIKE(column1,'%(param)s')) OR
(REGEXP_INSTR('%(param)s', '/(//') = 0 AND
REGEXP_LIKE'%(param)s')) OR
'%(param)s' IS NULL
)
解决方案
数以万计的错误;在评论中指出:
WITH Stats AS
(
SELECT
column1, column2
FROM TABLE1
UNION ALL
SELECT
column1, column2
FROM TABLE2
),
Newest AS
(
SELECT s.* --> missing comma
ROW_NUMBER() OVER
(
PARTITION BY
column1, column2 --> missing comma
REPLACE(REPLACE('%(param)s', '5', '6'), '7', '8')
ORDER BY colum2 DESC
) PRIORITY --> missing comma
CASE WHEN REGEXP_INSTR('%(param)s', '/(//')
> 0 AND REGEXP_LIKE(column1, '%(param)s')
THEN 'Y' END PARAM_MATCH,
CASE WHEN REGEXP_INSTR('%(param)s', '/(//')
= 0 AND column1 LIKE '%(param)s' THEN 'Y'
END LIKE_MATCH, --> superfluous comma
FROM Stats s
WHERE (REGEXP_INSTR('%(param)s', '/(//') > 0
AND REGEXP_LIKE(column1,'%(param)s')) OR
(REGEXP_INSTR('%(param)s', '/(//') = 0 AND
REGEXP_LIKE'%(param)s')) OR --> what is REGEXP_LIKE?
'%(param)s' IS NULL
)
--> missing SELECT statement
就语法而言,这现在是正确的。再一次,就像您之前的问题一样:编写查询时要更加小心,因为这变得很荒谬。
WITH Stats
AS (SELECT column1, column2 FROM TABLE1
UNION ALL
SELECT column1, column2 FROM TABLE2),
Newest
AS (SELECT s.*,
ROW_NUMBER ()
OVER (
PARTITION BY column1,
column2,
REPLACE (REPLACE ('%(param)s', '5', '6'),
'7',
'8')
ORDER BY colum2 DESC)
PRIORITY,
CASE
WHEN REGEXP_INSTR ('%(param)s', '/(//') > 0
AND REGEXP_LIKE (column1, '%(param)s')
THEN
'Y'
END
PARAM_MATCH,
CASE
WHEN REGEXP_INSTR ('%(param)s', '/(//') = 0
AND column1 LIKE '%(param)s'
THEN
'Y'
END
LIKE_MATCH
FROM Stats s
WHERE ( REGEXP_INSTR ('%(param)s', '/(//') > 0
AND REGEXP_LIKE (column1, '%(param)s'))
OR ( REGEXP_INSTR ('%(param)s', '/(//') = 0
AND REGEXP_LIKE ('???', '%(param)s'))
OR '%(param)s' IS NULL)
SELECT *
FROM newest;
推荐阅读
- vb.net - 试图将事件处理程序添加到 VB.NET 中的后期绑定对象时卡住了
- flutter - 在点击时调整 ListView 项目大小的动画
- java - 从 String 转换为 int 到 Vaadin 时出错
- javascript - 导航到另一个不在层次结构中传递函数的组件
- javascript - 可滚动容器中的 Highcharts 工具提示随内容滚动
- r - 在 R 中不使用 for 的先前值的循环计算
- node.js - SQlite 错误:5 附近的语法错误(better-sqlite3)
- ruby - Makefile 有错误 - 没有这样的文件或目录
- r - 如何在R中打开一个大文本文件
- python - 获取 sklearn 的部分拟合 SGDClassifier 系数