结构控制语句
顺序结构:
从上到下顺序执行
判断语句:
又是分支结构
分支结构是最基本的程序结构,分支结构由if语句实现。
-
使用if语句,根据条件改变程序的逻辑流程。if语句如下形式
if 条件1 then
语句序列1;
[elsif 条件2 then
语句序列2;
.......
else 语句序列 n;
]
end if;
--eg1
declare
enames varchar2(20) default '某三儿';
begin
if enames='某三儿' then
dbms_output.put_line('三儿,你好');
elsif enames='某四儿' then
dbms_output.put_line('四儿,你好');
else
dbms_output.put_line('二比你好');
end if;
end;
-
选择语句 CASE语句适用于分情况的多分支情况,可以有以下三种用法
-
基本CASE结构,相等选择
case 选择变量名
when 表达式1 then
语句序列1;
when 表达式2 then
语句序列2;
when 表达式n then
语句序列n;
......
else
语句序列n+1;
end case;
整个结构,选择变量的值同表达式进行顺序匹配,如果相等,则执行相关语句序列,不等则执行else语句序列。
-
表达式的case结构,oracle中case结构还能以赋值的形式出现等同于decode()函数,他根据选择变量的值求得不同的结果。语法如下
变量:=case 选择变量名
when 表达式1 then 值1
when 表达式2 then 值2
when 表达式n then 值n
else 值n+1
end;
----与decode函数 相同 -
~~~sql
--eg1
declare
v_rwdid varchar2(20);
begin
select n.rwids into v_rwdid from d_rwd_type n where n.rwdtype_id='707183';
case v_rwdid
when '707183' then
dbms_output.put_line('当前课程为同步课堂');
when '707185' then
dbms_output.put_line('当前课程为颠覆课堂');
when '707186' then
dbms_output.put_line('当前课程为快乐100');
else
dbms_output.put_line('当前课程不存在');
end case;
end;
---eg2用法2
declare
v_rwdid varchar2(20);
v_name varchar2(50);
begin
select n.rwids into v_rwdid from d_rwd_type n where n.rwdtype_id='707183';
v_name:=case v_rwdid
when '707183' then '同步课堂'
when '707184' then '颠覆课堂'
when '707185' then '快乐100'
else '课程不存在'
end;
dbms_output.put_line('当前课程为'||v_name) ;
end;
-
搜索CASE结构 Oracle 还提供了一种搜索case结构,它没有选择变量,直接判断条件表达式的值,根据条件表达式决定转向。case的任意判断,选择变量和表达式不再局限于相等,可以大于,小于,等于,等
case
when 条件表达式1 then
语句序列1;
when 条件表达式2 then
语句序列2;
...
else
语句序列n;
end case;
--eg
declare
sal emp.sail%type;
begin
select n.sail into sal from emp n where n.empno='001';
case
when sal>10000 then dbms_output.put_line('工资等级为A');
when sal>5000 then dbms_output.put_line('工资等级为B');
when sal>3000 then dbms_output.put_line('工资等级为C');
else
dbms_output.put_line('工资等级为d');
end case
end;
循环结构
循环结构也是最重要的程序控制语句,用来控制反复执行一段程序。比如我们要进行累加,则可以通过适当的循环程序实现。pl/sql循环可划分为3种:
-
基本LOOP循环
LOOP ---循环其实标识
语句1;
语句2;
exit [when 条件;]
END LOOP; ---循环结束标识--eg1 1+2...+100
declare
v_sum number default 0;
v_i number default 0;
begin
loop
v_sum:=v_sum+v_i;
v_i:=v_i+1;
when v_i>100 exit;
end loop;
end; -
FOR LOOP 循环 for 循环是固定次数的循环,格式如下
FOR 循环控制变量 in [reverse] 上限..下限
loop
语句1;
语句2;
end loop;
--循环控制变量 是隐含定义的,不需要声明。
--下限和上限用于指明循环次数。正常情况下循环控制变量取值由下限到上限递增,reserver关键字表示循环控制变量的取值由上限到下限递减。--eg1:输出99乘法表
declare
for i in 1..9 loop
for j in 1..i loop
dbms_output.put(i||'*'||j||'='||i*j);
dbms_output.put(' ');
end loop;
dems_output.putline('');
end loop;
begin
end; -
WHILE LOOP 循环
while循环是有条件循环,格式如下:
while 条件表达式
Loop
语句1;
语句2;
end loop;当条件满足时,执行循环,当条件不满足时,则循环结束。如果第一次判断条件为假,则不执行循环体。
----eg1 内层while循环输出9*9乘法表
declare
v_var number default 0;
begin
for i in 1..9 loop
v_var:=0; ---每行开始都是从1开始,必须赋值0
while v_var<i loop
v_var:=v_var+1;
dbms_output.put(v_var||'*'||i||'='||v_var * i||'');
end loop;
dbms_output.put_line(' ');
end loop;
end;--嵌套循环输出一个三角形
declare
v_var number default 0;
begin
for i in 1..6 loop
v_var:=6;
while v_var>i loop
v_var:=v_var-1;
dbms_output.put('');--第一层子循环输出倒三角的空格
end loop;
for j in 1..i loop
dbms_output.put('*');--第二层输出三角的一半
end loop;
for j in 1..i loop
dbms_output.put('*');--第三层输出三角的另一半。
end loop;
dbms_output.putline('')
end loop;
end;/*
**
****
******
********
**********
************ */ -
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!