2012-11-25 69 views
0

我有3個表。如何將SQL查詢更改爲PL/SQL

駕駛,旅行,tripLegs

在驅動程序表中的列E·,L#,STATUS。 在行程表的列是T#,L#,REG#,trip_DATE 在tripLeg表中的列是T#,LEG#,離開,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#腿# 如

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語句?

一直想知道整天讀書。仍然無法找到一個解決的辦法

+0

究竟你是什麼意思與「 *將其轉換爲PL/SQL語句*「。你想寫一個返回這個結果的函數嗎?使用此結果的存儲過程? –

+1

你爲什麼要PL/SQL語句?你需要它在一個函數或程序中? – Benoit

+0

是的我想寫一個PL/SQL存儲,顯示這個結果 –

回答

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()) 
+0

我沒有看到需要,但我我在做這個,因爲我正在學習PL/SQL存儲函數。試圖研究我的考試,並提出了這個問題。在考試到來之前需要了解。請,如果你可以幫助 –

+0

我的實際目標是使用存儲函數與函數中的參數,使用select語句列出l#連同每個l執行的最長旅程的長度# –

+0

@RusydiRusydii:所以你想要一個返回這些結果的函數? –