2

コード行に問題があります。作成したビューのカウント関数を作成しようとしています。私はこれをさまざまな方法で行いましたが、以下は私が最近使用した形式です。

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)コードの一部にあります。これにどのように取り組むべきかというアイデアはありますか?

4

5 に答える 5

6

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
于 2009-12-07T15:08:13.783 に答える
1
CREATE VIEW ERP_REPORT(EVENTNAME, DESCRIPTION, COUNT(RIDERS) AS

...。

すべきではありません:

CREATE VIEW ERP_REPORT(EVENTNAME, DESCRIPTION, COUNT(RIDERS)) AS
于 2009-12-07T15:02:36.810 に答える
1

エラーメッセージが指摘しているように、閉じ括弧がありません)。角かっこはここで開かれます:'ERP_REPORT(EVENTNAME''であり、閉じられることはありません。

于 2009-12-07T15:02:37.160 に答える
1

引用符で囲まない限り、列名に角かっこを含めることはできません。これを試して:

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
于 2009-12-07T15:07:03.533 に答える
1

Tonyが指摘しているように、ステートメントには実際にはいくつかの構文エラーがあります。欠落しているブラケットは最初のものです。

コードをさかのぼってどのブラケットにメイトがないかを見つけるのは難しいので、ブラケットのマッチングをサポートするIDEがあると便利だと思います。たまたま私の選択はTextPadですが、NotePadよりも高度なものなら何でもこれを実行できるはずです。

于 2009-12-07T15:16:34.643 に答える