PL/SQL流程控制语句
PL/SQL流程控制语句
介绍PL/SQL的流程控制语句, 包括如下三类:
控制语句: IF 语句
循环语句: LOOP语句, EXIT语句
顺序语句: GOTO语句, NULL语句
①if语句
IF <布尔表达式> THEN
PL/SQL 和SQL语句;
ELSIF< 其它布尔表达式> THEN
其它语句;
ELSIF< 其它布尔表达式> THEN
其它语句;
ELSE
其它语句;
END IF;
例:
declare
v_emp_name employees.last_name%type;
v_emp_sal employees.salary%type;
v_emp_sal_level varchar2(20);
begin
select last_name,salary into v_emp_name,v_emp_sal from employees where employee_id = 150; if(v_emp_sal >= 10000) then v_emp_sal_level := 'salary >= 10000';
elsif(v_emp_sal >= 5000) then v_emp_sal_level := '5000<= salary < 10000';
else v_emp_sal_level := 'salary < 5000';
end if; dbms_output.put_line(v_emp_name||','||v_emp_sal||','||v_emp_sal_level);
end;
② CASE 表达式
CASE selector
WHEN expression1 THEN result1
WHEN expression2 THEN result2
WHEN expressionN THEN resultN
[ ELSE resultN+1]
END;
例:
declare
v_sal employees.salary%type;
v_msg varchar2(50);
begin
select salary into v_sal
from employees
where employee_id = 150; --case 不能向下面这样用
/*
case v_sal when salary >= 10000 then v_msg := '>=10000'
when salary >= 5000 then v_msg := '5000<= salary < 10000'
else v_msg := 'salary < 5000'
end;
*/ v_msg :=
case trunc(v_sal / 5000)
when 0 then 'salary < 5000'
when 1 then '5000<= salary < 10000'
else 'salary >= 10000'
end; dbms_output.put_line(v_sal ||','||v_msg);
end;
③循环
1. 简单循环
LOOP
要执行的语句;
EXIT WHEN<条件语句> ; /*条件满足,退出循环语句*/
END LOOP;
2. WHILE 循环(相较1,推荐使用2)
WHILE<布尔表达式> LOOP
要执行的语句;
END LOOP;
3.数字式循环
FOR循环计数器IN[REVERSE ] 下限.. 上限LOOP
要执行的语句;
END LOOP;
每循环一次,循环变量自动加1;使用关键字REVERSE,循环变量自动减1。
跟在IN REVERSE 后面的数字必须是从小到大的顺序,而且必须是整数,不能是变量或表达式。可以使用EXIT退出循环。
例:使用循环语句打印 1 - 100.(三种方式)
1). LOOP ... EXIT WHEN ... END LOOP
declare
--初始化条件
v_i number(3) := 1;
begin
loop
--循环体
dbms_output.put_line(v_i);
--循环条件
exit when v_i = 100;
--迭代条件
v_i := v_i + 1;
end loop;
end;
2). WHILE ... LOOP ... END LOOP
declare
--初始化条件
v_i number(3) := 1;
begin
--循环条件
while v_i <= 100 loop
--循环体
dbms_output.put_line(v_i);
--迭代条件
v_i := v_i + 1;
end loop;
end;
3).
begin
for i in 1 .. 100 loop
dbms_output.put_line(i);
end loop;
end;
例: 综合使用 if, while 语句, 打印 1 - 100 之间的所有素数
(素数: 有且仅用两个正约数的整数, 2, 3, 5, 7, 11, 13, ...).
declare
v_i int := 2;
v_j int := 2;
v_flag boolean := false;
begin
while v_i < 100 loop
v_j := 2;
while v_j<sqrt(v_i) loop
if mod(v_i,v_j) = 0 then
v_flag := true;
exit;
end if;
v_j := v_j + 1;
end loop;
if v_flag = false then
dbms_output.put_line(v_i||',是素数');
end if;
v_flag := false;
v_i := v_i +1;
end loop;
end;
④标号和GOTO
PL/SQL中GOTO语句是无条件跳转到指定的标号去的意思。语法如下:
GOTO label;
. . . . . .
<<label>> /*标号是用<<>>括起来的标识符*/
例:打印1——100的自然数,当打印到50时,跳出循环,输出“打印结束”
(方法一)
begin
for i in 1..100 loop
dbms_output.put_line(i);
if(i = 50) then
goto label;
end if;
end loop; <<label>>
dbms_output.put_line('打印结束'); end;
(方法二)
begin
for i in 1..100 loop
dbms_output.put_line(i);
if(i mod 50 = 0) then
dbms_output.put_line('打印结束');
exit;
end if;
end loop;
end;
PL/SQL流程控制语句的更多相关文章
- Oracle数据库之PL/SQL流程控制语句
Oracle数据库之PL/SQL流程控制语句 在任何计算机编程语言(如C,Java,C#等)都有各种流程控制语句,同样,在PL/SQL中也存在这样的流程控制结构. 几种常见的流程控制结构: 一.条件结 ...
- [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)
原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ...
- oracle数据库之PL/SQL 流程控制语句
介绍 PL/SQL 的流程控制语句, 包括如下三类: 1.控制语句: IF 语句 2.循环语句: LOOP 语句, EXIT 语句 3.顺序语句: GOTO 语句, NULL 语句 一 条件语句 IF ...
- PL/SQL 流程控制语句-条件结构,循环结构
条件结构 一.IF-THEN语句 IF-THEN语句是最简单的IF语句. 语法: IF condition THEN Statements END IF; 例子: declare v_score nu ...
- MS SQL 流程控制语句
Declare myCursor cursor For Select * from table1 open myCursor Fet ...
- PL/SQL编程—控制语句
SQL> create or replace procedure sp_pro5(id_in varchar2) is v_sal mytest.salary%type; begin sel ...
- (转)SQL流程控制语句学习(二):begin…end if…else case
1.begin…end 语法: begin {sql语句或语句块} end 注意:begin 和end要成对使用 2.if…else 语法: if 布尔表达式 {sql语句或语句块} else 布 ...
- (转)SQL流程控制语句学习(一):变量及控制语句种类
1.局部变量 用户自己定义的,称局部变量,以@标识. 作用范围:定义局部变量的批处理.存储过程.触发器和语句块 局部变量的定义: declare @局部变量名 数据类型 注意:变量的类型不能是text ...
- SQL流程控制语句学习(三):while break continue
1.while语法 while 布尔表达式 {sql语句或语句块} break --跳出本层循环 {sql语句或语句块} continue --跳出本次循环 {sql语句或语句块} 2.whi ...
随机推荐
- web service上传参数代码实例
web service上传参数代码实例 这次做的项目用到webservice比较多,最开始在网上看的参考dome,发现都不行,后来发现安卓4.0以后有很大的不同,在做传参时,有些东西需要注意: 第一, ...
- Swift开发第十二篇——protocol组合&static和class
本篇分为两部分: 一.Swift 中 protocol 组合的使用 二.Swfit 中 static和class 的使用 一.Swift 中 protocol 组合的使用 在 Swift 中我们可以使 ...
- ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布 ...
- 验证码做得不错,有.net 版本 https://captcha.com/
https://captcha.com/ https://captcha.com/demos/features/captcha-demo.aspx
- (视频) 《快速创建网站》 2.3 WordPress初始化和功能简介
本文是<快速创建网站>系列的第4篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 访问本系列目录,请点击:http://devopshub.cn/tag ...
- jQuery 更改checkbox的状态,无效
今天写页面遇到复选框动态全选或全不选问题,正常写法如下: $("#tb").find("input[type='checkbox']").attr(" ...
- CMPP错误码说明
与中国移动代码的对应关系. MI::zzzzSMSC返回状态报告的状态值为EXPIREDMJ:zzzzSMSC返回状态报告的状态值为DELETEDMK:zzzzSMSC返回状态报告的状态值为UNDEL ...
- SSH框架配置释义
创建一个bean, 依赖注入支持的不同注入方式及具体配置方法 属性注入 通过setter()方法注入bean的属性或者依赖对象.属性注入要求bean需要提供一个默认构造函数和对应的setter方法 ...
- C语言 复制字符串 malloc
今天在看前辈的代码,对其中字符串复制有时候直接把指针赋给另一个指针,有的malloc一个内存,然后把整个字符串的值拷贝过来,有点费解,就研究了一下,会了之后发现也没什么奥秘,其实很简单,不过还是记录一 ...
- ssh升级
Openssh升级操作步骤(此方法仅供参考) 1 .开启telnet服务 未避免openssh升级失败,导致ssh无法连接,在升级前首先开启telnet服务. 首先要确定是否安装了telnet 修改配 ...