Search code examples
oracle-databaseviewsqlplusora-00907

Can't find the cause of a 'missing right parenthesis' error


I am having problems with a line of code. I am trying to create a count function for a view that I created. I have done this a bunch of different ways but below is the format that I have most recently used.

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;

The error I am getting is ORA-00907: missing right parenthesis. The error is at the (COUNT(RIDERS) part of the code. Any ideas how I should tackle this?


Solution

  • The list of names in parentheses on line 1 should be the names of the view columns:

    CREATE VIEW ERP_REPORT(EVENTNAME, DESCRIPTION, COUNT(RIDERS) AS ...
    

    You can't create a column called "COUNT(RIDERS" or even "COUNT(RIDERS)" since a column name may not contain ( or ). This would work:

    CREATE VIEW ERP_REPORT(EVENTNAME, DESCRIPTION, RIDER_FULL_NAME) AS ...
    

    However it appears that you really do want a count of something, though I'm not sure of what. To do that the view definition would have to be something like:

    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;
    

    (i.e. the COUNT function goes in the SELECT part, not in the list of column names).

    As an aside, since you are presumably new to Oracle, I would suggest you start using the more modern ANSI join syntax to make your queries clearer:

    ...
    FROM EVENTS
    JOIN RACES ON RACES.EVENTID = EVENTS.EVENTID
    JOIN PARTICIPATION ON PARTICIPATION.RACEID = RACES.RACEID
    JOIN RIDERS ON RIDERS.RIDERID = PARTICIPATION.RIDERID