找不到"缺少右括号"错误的原因

Mic*_*ael 2 oracle sqlplus view ora-00907

我遇到了一行代码问题.我正在尝试为我创建的视图创建计数函数.我已经做了很多不同的方式,但下面是我最近使用的格式.

CREATE VIEW ERP_REPORT(EVENTNAME, DESCRIPTION, COUNT(RIDERS) AS
SELECT EVENTNAME, RACES.DESCRIPTION, 
       RIDERS_FIRSTNAME||' '||RTRIM(RIDERS_LASTNAME)
FROM EVENTS, RACES, PARTICIPATION, RIDERS
WHERE EVENTS.EVENTID = RACES.EVENTID
AND RACES.RACEID = PARTICIPATION.RACEID
AND RIDERS.RIDERID = PARTICIPATION.RIDERID
ORDER BY RIDERS.RIDERS_LASTNAME, EVENTNAME;
Run Code Online (Sandbox Code Playgroud)

我得到的错误是ORA-00907: missing right parenthesis.错误(COUNT(RIDERS)发生在代码的一部分.我有什么想法应该解决这个问题?

Ton*_*ews 6

第1行括号中的名称列表应该是视图列的名称:

CREATE VIEW ERP_REPORT(EVENTNAME, DESCRIPTION, COUNT(RIDERS) AS ...
Run Code Online (Sandbox Code Playgroud)

您无法创建名为"COUNT(RIDERS"或甚至"COUNT(RIDERS)"的列,因为列名可能不包含(或).这样可以:

CREATE VIEW ERP_REPORT(EVENTNAME, DESCRIPTION, RIDER_FULL_NAME) AS ...
Run Code Online (Sandbox Code Playgroud)

然而,看起来你真的想要一些东西,虽然我不确定是什么.要做到这一点,视图定义必须是这样的:

CREATE VIEW ERP_REPORT(EVENTNAME, DESCRIPTION, RIDER_COUNT) AS
SELECT EVENTNAME, RACES.DESCRIPTION, COUNT(*)
FROM EVENTS, RACES, PARTICIPATION, RIDERS
WHERE EVENTS.EVENTID = RACES.EVENTID
AND RACES.RACEID = PARTICIPATION.RACEID
AND RIDERS.RIDERID = PARTICIPATION.RIDERID
GROUP BY EVENTNAME, DESCRIPTION;
Run Code Online (Sandbox Code Playgroud)

(即COUNT函数进入SELECT部分​​,而不是列名列表).

顺便说一句,由于您可能是Oracle的新手,我建议您开始使用更现代的ANSI连接语法来使您的查询更清晰:

...
FROM EVENTS
JOIN RACES ON RACES.EVENTID = EVENTS.EVENTID
JOIN PARTICIPATION ON PARTICIPATION.RACEID = RACES.RACEID
JOIN RIDERS ON RIDERS.RIDERID = PARTICIPATION.RIDERID
Run Code Online (Sandbox Code Playgroud)