如何将SQL查询更改为PL/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#

我有三张桌子

驾驶员,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# = 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())