错误报告 - ORA-00907: 缺少右括号 00907. 00000 - “缺少右括号
Posted
技术标签:
【中文标题】错误报告 - ORA-00907: 缺少右括号 00907. 00000 - “缺少右括号【英文标题】:Error report - ORA-00907: missing right parenthesis 00907. 00000 - "missing right parenthesis 【发布时间】:2020-11-22 01:42:15 【问题描述】:我需要帮助。我对 SQL 编码比较陌生。
我需要创建以下视图: 每个抄表员在当月读取的抄表数(此视图应该可以随时使用,无需更改以适应日期)。
我有这个代码
CREATE VIEW ViewA AS
SELECT SUM(meter) FROM reading
WHERE MONTH(columnName) = MONTH(CURRENT_DATE());
但是错误说: 从行开始的错误:命令中的 1 - 创建视图 ViewA 为 从读数中选择总和(米) WHERE MONTH = MONTH(CURRENT_DATE()) 错误报告 - ORA-00907: 缺少右括号 00907. 00000 - “缺少右括号” *原因: *行动:
【问题讨论】:
【参考方案1】:如果您需要每个抄表器,则需要聚合:
CREATE VIEW ViewA AS
SELECT meter_reader, SUM(meter)
FROM reading
WHERE TRUNC(date_column, 'Month') = TRUNC(sysdate, 'Month')
GROUP BY meter_reader -- whatever that column is
一般来说,这样写会更有效率:
CREATE VIEW ViewA AS
SELECT meter_reader, SUM(meter)
FROM reading
WHERE date_column >= TRUNC(sysdate, 'Month') AND
date_column < TRUNC(sysdate, 'Month') + INTERVAL '1' MONTH
GROUP BY meter_reader -- whatever that column is
【讨论】:
【参考方案2】:MONTH
不是 Oracle 函数,您不希望在 CURRENT_DATE
之后使用大括号,您需要为聚合值指定别名。
CREATE VIEW ViewA AS
SELECT SUM(meter) AS total_reading
FROM reading
WHERE EXTRACT( MONTH FROM columnName) = EXTRACT( MONTH FROM CURRENT_DATE );
但是,这将汇总任何年份的当前月份。如果您只想要当前月份,那么:
CREATE VIEW ViewA AS
SELECT SUM(meter) AS total_reading
FROM reading
WHERE columnName >= TRUNC( CURRENT_DATE, 'MM' )
AND columnName < ADD_MONTHS( TRUNC( CURRENT_DATE, 'MM' ), 1 );
db小提琴here
但是,您的“作业”问题是:
每个抄表员在当月抄表的次数
你没有找到这个;您可能想使用COUNT
而不是SUM
并且您想使用GROUP BY
来获取每个抄表器的值(但您没有给出表定义,因此不清楚应该按哪一列分组) .
但类似:
CREATE VIEW ViewA AS
SELECT meter_reader,
COUNT(meter) AS num_meters_read
FROM reading
WHERE columnName >= TRUNC( CURRENT_DATE, 'MM' )
AND columnName < ADD_MONTHS( TRUNC( CURRENT_DATE, 'MM' ), 1 )
GROUP BY meter_reader;
【讨论】:
以上是关于错误报告 - ORA-00907: 缺少右括号 00907. 00000 - “缺少右括号的主要内容,如果未能解决你的问题,请参考以下文章