我正在尝试用 PL/SQL 编写一个函数,该函数接受一个参数 ,并返回在他最喜欢的体育场打过pname
多少次(球员姓名)。pname
这部分主要按预期工作。我的问题是我试图添加的错误处理。即
- 如果
pname
player.name 中不存在则返回 -2 - 如果
pname
favstadiums.player 中不存在则返回 -1
这就是我所拥有的(已转换为评论的部分是我想要弄清楚的):
create or replace function favS(pname varchar2) return number
as
fav_stadium_count number;
vplayername varchar(100);
begin
select sum(case when favstadiums.stadium = matches.stadium then 1 else 0 end),
players.name into fav_stadium_count, vplayername
from favstadiums
full outer join players
on favstadiums.player = players.name
full outer join matches
on favstadiums.stadium = matches.stadium
where name = pname
and players.team in (matches.home, matches.away)
group by players.name;
if (fav_stadium_count >= 0) then
return fav_stadium_count;
end if;
-- if (pname not in players.name) then
-- return -2;
-- end if;
-- if (pname not in favstadiums.player) then
-- return -1;
-- end if;
end;
我尝试将 player.name 存储为变量vplayername
并使用if (pname not in vplayername) then...
,但这不会返回任何值,而不是-2
.
我没有与错误处理相关的另一个单独问题是fav_stadium_count
永远不会返回计数 0。
帮助将不胜感激。
编辑:
如果有帮助,这是关系图(我知道它看起来不寻常,但我没有创建它):