if/else
运费计算,同一个省份则只收取基价。 根据是不是同一个省返回距离,同一个省份则返回零。
declare
mycityname varchar2(20) := '长沙市';toCityname varchar2(20) := '唐山市';
dis number;
cnt number;
begin
select count(*)
into cnt
from s_city
where cityname = toCityname
and provinceid =
(select provinceid from s_city where cityname = mycityname);
if (cnt > 0) then
-- select 0 from dual;
select 0 into dis from dual;
else
-- dbms_output.put_line(select GetDisByCityName from dual);
select GetDisByCityName(mycityname, tocityname) into dis from dual;
end if;
dbms_output.put_line(dis);
end;
循环
计算运费的规格:通过设置一组路程的分割线,来分段计价。
比如可以把一万公里分成 10段,没一段收取特定的价格。要提高价格的话,可以分更多的段数。
create table send_scope
(
send_scopeid number,
val number
);
创建一个序列
CREATE SEQUENCE seq_send_scope
increment by 1
START WITH 1
NOMAXVALUE
NOCYCLE cache 10; --cache 10 个在内存中。
200公里为一段,分14段。
begin
declare
num number := 200;
begin
for n in 1 .. 15 loop
select num + 200 into num from dual;
insert into send_scope values (seq_send_scope.nextval, num);
end loop;
end;
end;
select * from send_scope;
---另外两个循环的示例
declare
num number := 0;
begin
<<myloop>>
loop
dbms_output.put_line(num);
exit myloop when( num > 10);
num := num + 1;
end loop;
end;
declare
num number := 10;
begin
while(num>0)loop
num:= num-1;
dbms_output.put_line(num);
end loop;
end;