Не удалось найти причину ошибки «отсутствует правильная скобка» - PullRequest
2 голосов
/ 07 декабря 2009

У меня проблемы со строкой кода. Я пытаюсь создать функцию подсчета для созданного мною представления. Я сделал это разными способами, но ниже представлен формат, который я использовал в последнее время.

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;

Я получаю ошибку ORA-00907: missing right parenthesis. Ошибка в (COUNT(RIDERS) части кода. Любые идеи, как я должен заняться этим?

Ответы [ 5 ]

6 голосов
/ 07 декабря 2009

Список имен в скобках в строке 1 должен содержать имена столбцов представления:

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

Вы не можете создать столбец с именем «COUNT (RIDERS» или даже «COUNT (RIDERS)», поскольку имя столбца может не содержать (или). Это будет работать:

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

Однако, похоже, вы действительно хотите посчитать что-то, хотя я не уверен в чем. Для этого определение представления должно быть примерно таким:

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;

(т.е. функция 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
1 голос
/ 07 декабря 2009

Как указывает Тони, в вашем утверждении есть несколько синтаксических ошибок. Недостающая скобка - только первая.

Я считаю полезным иметь IDE, которая поддерживает сопоставление скобок, потому что может быть трудно пройти назад по коду и найти, в какой скобке отсутствует сопряжение. Так получилось, что я выбрал TextPad , но почти все, что является более продвинутым, чем NotePad, должно быть в состоянии сделать это.

1 голос
/ 07 декабря 2009

Как указывается в сообщении об ошибке, вам не хватает закрывающей скобки). Скобка открывается здесь: «ERP_REPORT (EVENTNAME») и никогда не закрывается.

1 голос
/ 07 декабря 2009

Вы не можете иметь квадратные скобки в именах столбцов, если не ставите кавычки. Попробуйте это:

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

или

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

Например:

SQL> CREATE OR REPLACE VIEW foo ("count(*)") AS SELECT COUNT(*) FROM dual;

View created

SQL> CREATE OR REPLACE VIEW foo (count_all) AS SELECT COUNT(*) FROM dual;

View created
1 голос
/ 07 декабря 2009
CREATE VIEW ERP_REPORT(EVENTNAME, DESCRIPTION, COUNT(RIDERS) AS

....

Не должно быть:

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