如何将SQL查询更改为PL/SQL
我有三张桌子 驾驶员,trip,tripLegs 在驱动程序表中,列为E#、L#、状态。 在行程表中,列为T、L、REG、行程日期 在tripLeg表中,列为T#、LEG#、出发、目的地 首先,我尝试了一个sql查询,它是:如何将SQL查询更改为PL/SQL,sql,plsql,Sql,Plsql,我有三张桌子 驾驶员,trip,tripLegs 在驱动程序表中,列为E#、L#、状态。 在行程表中,列为T、L、REG、行程日期 在tripLeg表中,列为T#、LEG#、出发、目的地 首先,我尝试了一个sql查询,它是: select d.l#, count(tg.leg#) as total_no_of_legs from driver d left outer join trip t on (d.l# = t.l#) left outer join tripleg tg on (t.t#
select d.l#, count(tg.leg#) as total_no_of_legs
from driver d left outer join trip t on (d.l# = t.l#)
left outer join tripleg tg on (t.t# = tg.t#)
group by d.l#;
我得到的结果是:
L# Total_no_of_legs
-----------------------------
11111 20
等等
这是所有T#的腿的总数#
e、 g
总数=20这就是为什么L#11111的腿总数是20。
但我想知道每个L的最大腿数是10。
我如何通过查询找出按T分组的最大支腿数
之后,我如何真正开始将其转换为PL/SQL语句
我一整天都在思考和阅读书籍。还是找不到解决办法
但我想找出每个L的最大腿数#
也许我遗漏了什么,但这不简单吗:
select d.l#,
max(tg.leg#) as max_leg_nr
from driver d
left outer join trip t on (d.l# = t.l#)
left outer join tripleg tg on (t.t# = tg.t#)
group by d.l#
我认为没有必要将其放入存储过程中
要将其放入返回结果的函数中,您需要一个流水线函数:
create type leg_info as object (l# integer, max_leg_nr integer);
/
create type leg_info_list as table of leg_info
/
create or replace function get_max_leg_info
return leg_info_list
PIPELINED
as
r_info leg_info;
begin
r_info := leg_info(null, null);
for p_rec in ( .... here goes the select ... )
loop
r_info.l# := p_rec.l#;
r_info.max_leg_nr := p_rec.max_leg_nr ;
pipe row(r_row);
end loop;
return;
end;
/
然后,您可以像这样使用此功能:
select *
from table(get_max_leg_info())
“将其转换为PL/SQL语句”的确切含义是什么。是否要编写一个返回此结果的函数?使用此结果的存储过程?为什么希望它是PL/SQL语句?你在函数或过程中需要它吗?是的,我想写一个PL/SQL存储来显示这个结果。你为什么想要一个存储过程?询问有什么问题?我也不认为有必要,但我之所以这么做是因为我正在学习PL/SQL存储函数。为了准备考试,我想出了这个主意。在考试之前,你需要理解。请注意,如果您能提供帮助,我的实际目标是在函数中使用带有参数的存储函数,使用select语句列出l#,以及每个l#@RusydiRusydii执行的最长行程的长度:那么您想要一个返回这些结果的函数吗?
select *
from table(get_max_leg_info())