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_in
值,我需要选择n
值!
谢谢!
答案 0 :(得分: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;
答案 1 :(得分:0)
将此添加到给定的查询
and rownum < together_in;
确保together_in初始化良好
答案 2 :(得分: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;
我使用了ROWNUM
和ORDER BY ... DESC
的组合,以便您只获得一行(最接近together_in
的行)。