【发布时间】:2017-10-12 10:41:08
【问题描述】:
您好,我问了一个问题related to this already,但还有第二个问题。我评论说我制作了一个嵌套表格,其中包含参加比赛的球队,而不是为每个球队和得分分开行。
我想为特定的 GameId 而不是表中的所有行运行方法。这次我已经包含了我的 Game_Type 对象,尽管我认为上次没有必要。
CREATE TYPE Game_Type AS OBJECT
(GameId NUMBER)
/
CREATE TABLE Game_Table of Game_Type
/
INSERT INTO Game_Table
VALUES (1)
/
INSERT INTO Game_Table
VALUES (2)
/
CREATE TYPE Team_Type AS OBJECT
(TeamPlayed VARCHAR2(30),
TeamScore NUMBER(1))
/
CREATE TYPE TeamsPlayed_Table as TABLE OF Team_Type
/
CREATE OR REPLACE TYPE After_Team AS OBJECT
(GameRef REF Game_Type,
GamePlayed Teamsplayed_Table,
MAP MEMBER FUNCTION team_rating RETURN NUMBER)
/
CREATE TABLE Team_Table of After_Team NESTED TABLE GamePlayed STORE AS
GamePlayed_Nested
/
CREATE OR REPLACE TYPE BODY After_Team
AS
MAP MEMBER FUNCTION team_rating
RETURN NUMBER
IS
avg_score NUMBER;
BEGIN
SELECT AVG(c.TeamScore)
INTO avg_score
FROM Team_Table d, table(d.GamePlayed) c;
RETURN avg_score;
END;
END;
/
INSERT INTO Team_Table
VALUES((SELECT REF(a) FROM Game_Table a WHERE a.gameid = 1),
(TeamsPlayed_Table(Team_Type('Team A', 1), Team_Type('Team B', 3))))
/
INSERT INTO Team_Table
VALUES((SELECT REF(a) FROM Game_Table a WHERE a.gameid = 2),
(TeamsPlayed_Table(Team_Type('Team C', 5), Team_Type('Team D', 9))))
/
现在当我执行我的方法时:
SELECT t.team_rating()
from Team_Table t
where t.GameRef.GameId = 1
它返回所有值的平均值,而不仅仅是第 1 场比赛。
【问题讨论】:
-
请参阅 my answer 到您的初始问题 - 您需要在
team_rating函数中使用WHERE子句。您接受的答案中缺少我已经说过的内容。 -
已将其他问题的答案归功于您。