2014-02-15 75 views
0
declare 
    hour_in number:=4; 
    minute_in number:=59; 
    sek_in number:=45; 
    together_in number; 
    sat varchar(10):='G6'; 
    M0 number; 
begin 
    kopa_in:=((sek_in/60)+minute_in)/60+hour_in; 

    select M0 into M0 
    from jsm_nav 
    where ((sekunde/60)+minute)/60+stunda<together_in 
    and prn=sat; 

    select delta_n into deltan 
    from jsm_nav 
    where ((sekunde/60)+minute)/60+stunda<together_in 
    and prn=sat; 
end; 

這隻適用於只有一個值低於together_in!我需要選擇n-1的值,如果我們假設together_inn的值! 謝謝!PL/SQL如何選擇n-1值?

回答

0

一下添加到給定的查詢

and rownum < together_in; 

確保together_in很好初始化

0

SELECT INTO需要一個只有一行。您應該限制查詢返回的行數。要做到這一點

一種方法是使用ROWNUM

select M0 into M0 from (select M0 from jsm_nav where ((sekunde/60)+minute)/60+stunda<together_in and prn=sat order by ((sekunde/60)+minute)/60+stunda desc) where rownum = 1; 
select delta_n into deltan from (select delta_n from jsm_nav where ((sekunde/60)+minute)/60+stunda<together_in and prn=sat order by ((sekunde/60)+minute)/60+stunda desc) where rownum = 1; 

我用的ROWNUMORDER BY ... DESC組合,讓你得到一個確切行(最接近together_in行)。

1

你是什麼意思你想要「n - 1」值?你只能把一個放入一個變量中。

一個簡單的方法來得到一個值,而不更改查詢很是使用min()max()

select min(M0) into M0 from jsm_nav where ((sekunde/60)+minute)/60+stunda<together_in and prn=sat; 
select min(delta_n) into deltan from jsm_nav where ((sekunde/60)+minute)/60+stunda<together_in and prn=sat; 

當然,你不需要兩個查詢做到這一點:

select min(M0),min(delta_n) into M0, jsm_nav 
from jsm_na 
where ((sekunde/60)+minute)/60+stunda<together_in and prn=sat;