プレーヤーの名前をパラメーターとして受け取り、お気に入りのスタジアムで行われた試合の数を返す PL/SQL 関数を作成しようとしています。
プレーヤーがプレーヤー テーブルに存在しない場合、関数は -2 を返す必要があります。プレーヤーが存在するが、お気に入りのスタジアムがない場合、関数は -1 を返します。
これは私が持っているものです:
create or replace function favS(pname varchar2) return number
as
fav_stadium_count number;
begin
select count(case when favstadiums.stadium = matches.stadium then 1 else null end) into fav_stadium_count
from favstadiums
right join players
on favstadiums.player = players.name
outer join matches
on favstadiums.stadium = matches.stadium;
if (count(case when favstadiums.stadium = matches.stadium then 1 else null end) > 0) then
return fav_stadium_count;
end if;
if players.name is null then
return -2;
end if;
if (count(case when favstadiums.stadium = matches.stadium then 1 else null end) < 1) then
return -1;
end if;
end;
しかし、次のコンパイル エラーが発生します。
Line 9: ORA-00933: SQL command not properly ended
Line 5: SQL Statement ignored
これを修正する方法についてのアイデアはありますか?
これが役立つ場合のデータベースの関係図は次のとおりです。
編集(テッド用):
create or replace function favS(pname varchar2) return number
as
fav_stadium_count number;
vplayername varchar(100);
begin
select count(case when favstadiums.stadium = matches.stadium then 1 else null end) into fav_stadium_count,
players.name into vplayername
from favstadiums
right join players
on favstadiums.player = players.name
left outer join matches
on favstadiums.stadium = matches.stadium
where name = pname;
if (fav_stadium_count > 0) then
return fav_stadium_count;
end if;
if vplayername is null then
return -2;
end if;
if (fav_stadium_count < 1) then
return -1;
end if;
end;