如何将SQL查询更改为PL / SQL

时间:2012-11-25 09:01:24

标签: sql plsql

我有3张桌子。

司机,旅行,旅行腿

在驱动程序表中,列为E#,L#,STATUS。 在旅行表中,列是T#,L#,REG#,trip_DATE 在tripLeg表中,列是T#,LEG#,DEPARTURE,DESTINATION

首先我尝试了一个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

T#1 's leg# = 3
T#2's leg# = 10
T#3's leg# = 7

总计= 20这就是为什么L#11111总腿数为20的原因。 但是我想知道每个L#的最大腿数#是10。 如何进行查询以通过T#找出最大数量的LEG#组?

之后,我如何真正开始将其转换为PL / SQL语句?

整天都在想着读书。仍然无法找到解决方案

1 个答案:

答案 0 :(得分:0)

  

但我想找出每个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())