PL/SQL条件控制

 

决策结构需要程序员指定一个或多个条件要计算,或由程序进行测试,如果条件被确定为真那么一条或多条语句被执行,如果要被执行的其它语句条件被确定为假,则选其它执行块。

以下是从在大多数编程语言中出现的典型的条件(即,决策)结构的一般:

PL/SQL编程语言提供了以下几种类型的决策语句。点击以下链接查看其详细信息。

语句 描述
IF - THEN 语句 IF语句关联的条件通过THEN和END IF关键字封闭的语句序列。如果条件为真,则语句被执行,如果条件为假或NULL,则IF语句什么都不做
IF-THEN-ELSE 语句 IF语句添加关键字ELSE后面的语句的替代序列。如果条件为假或NULL,语句则只有替换序列得到执行。它确保任一陈述的序列的被执行
IF-THEN-ELSIF 语句 它可以在几个方案之间进行选择
Case 语句 像IF语句中,CASE语句选择要执行的语句一个序列。但是选择顺序,CASE语句使用一个选择而不是多个布尔表达式。一个选择器其值被用来选择多个选项之一的表达式
Searched CASE 语句 所搜索的CASE语句没有选择,它的WHEN子句包含产生布尔值的搜索条件。
内嵌IF-THEN-ELSE 可以使用一个IF-THEN或IF-THEN-ELSIF语句中的另一个IF-THEN或IF-THEN-ELSIF声明

PL/SQL IF-THEN语句

它是最简单的IF控制语句,经常使用的决策和改变程序执行的控制流程的形式。

IF语句关联的条件通过THEN和END IF关键字封闭的语句序列。如果条件为TRUE,语句得到执行,并且如果条件为FALSE或NULL,那么IF语句什么都不做。

语法:

IF-THEN语句的语法是:

IF condition THEN
S;
END IF;

其中,条件是布尔或关系条件,S是一个简单的或复合语句。一个IF-THEN语句的例子如下:

IF (a <= 20) THEN
c:= c+1;
END IF;

如果布尔表达式条件计算为真,那么代码的if语句里面的模块将被执行。如果if语句结束后布尔表达式的值为false那么第一组码(闭幕结束后,若)将被执行。

流程图:

示例 1:

让我们尝试一个完整的例子,来说明这一概念:

DECLARE
a number(2) := 10;
BEGIN
a:= 10;
-- check the boolean condition using if statement
IF( a < 20 ) THEN
-- if condition is true then print the following
dbms_output.put_line('a is less than 20 ' );
END IF;
dbms_output.put_line('value of a is : ' || a);
END;
/

让我们尝试一个完整的例子,将说明这一概念:

a is less than 20
value of a is : 10 PL/SQL procedure successfully completed. 

示例2:

考虑我们在创建表以及表中的一些记录,因为我们在创建 PL/SQL变量类型

DECLARE
c_id customers.id%type := 1;
c_sal customers.salary%type;
BEGIN
SELECT salary
INTO c_sal
FROM customers
WHERE id = c_id;
IF (c_sal <= 2000) THEN
UPDATE customers
SET salary = salary + 1000
WHERE id = c_id;
dbms_output.put_line ('Salary updated');
END IF;
END;
/

当上述代码在SQL提示符执行时,它产生了以下结果:

Salary updated

PL/SQL procedure successfully completed.

PL/SQL IF-THEN-ELSE语句

IF-THEN语句顺序可以后跟的ELSE语句,当条件为FALSE,执行其中的可选序列。

语法:

IF-THEN-ELSE语句的语法是:

IF condition THEN
S1;
ELSE
S2;
END IF;

其中,S1和S2是语句的不同的序列。在IF-THEN-ELSE语句,当测试条件为TRUE,则该语句S1被执行,当测试条件为FALSE,那么执行语句S2。例如:

IF color = red THEN
dbms_output.put_line('You have chosen a red car')
ELSE
dbms_output.put_line('Please choose a color for your car');
END IF;

如果布尔表达式条件计算结果为真,那么代码if-then块将被执行,否则代码else块将被执行。

流程图:

示例:

让我们尝试一个完整的例子,来说明这一概念:

DECLARE
a number(3) := 100;
BEGIN
-- check the boolean condition using if statement
IF( a < 20 ) THEN
-- if condition is true then print the following
dbms_output.put_line('a is less than 20 ' );
ELSE
dbms_output.put_line('a is not less than 20 ' );
END IF;
dbms_output.put_line('value of a is : ' || a);
END;
/

当上述代码在SQL提示符执行时,它产生了以下结果:

a is not less than 20
value of a is : 100 PL/SQL procedure successfully completed.

PL/SQL IF-THEN-ELSIF语句

在IF-THEN-ELSIF语句可以几种选择之间进行选择。一个IF-THEN语句可以跟着一个可选的 ELSIF...ELSE 语句。ELSIF子句允许添加附加条件。

使用IF-THEN-ELSIF语句时有几点要牢记。

  • 它是ELSIF, 而不是 ELSEIF

  • 一个IF-THEN语句可以有零或一个ELSE语句,它必须跟从ELSIF语句。

  • 一个IF-THEN语句可以有0到多个ELSIF,它们必须在ELSE之前。

  • 一旦某个ELSIF成功,任何剩余的ELSIF或其他都不被测试。

语法:

在PL/SQL编程语言中的IF-THEN-ELSIF语句的语法是:

IF(boolean_expression 1)THEN
S1; -- Executes when the boolean expression 1 is true
ELSIF( boolean_expression 2) THEN
S2; -- Executes when the boolean expression 2 is true
ELSIF( boolean_expression 3) THEN
S3; -- Executes when the boolean expression 3 is true
ELSE
S4; -- executes when the none of the above condition is true
END IF;

示例:

DECLARE
a number(3) := 100;
BEGIN
IF ( a = 10 ) THEN
dbms_output.put_line('Value of a is 10' );
ELSIF ( a = 20 ) THEN
dbms_output.put_line('Value of a is 20' );
ELSIF ( a = 30 ) THEN
dbms_output.put_line('Value of a is 30' );
ELSE
dbms_output.put_line('None of the values is matching');
END IF;
dbms_output.put_line('Exact value of a is: '|| a );
END;
/

当上述代码在SQL提示符执行时,它产生了以下结果:

None of the values is matching
Exact value of a is: 100 PL/SQL procedure successfully completed.

PL/SQL CASE语句

像IF语句中,CASE语句选择要执行的语句一个序列。但是选择顺序,CASE语句使用一个选择而不是多个布尔表达式。选择器是一个表达式,其值被用来选择多个选择之一。

语法:

在PL/SQLcase语句语法是:

CASE selector
WHEN 'value1' THEN S1;
WHEN 'value2' THEN S2;
WHEN 'value3' THEN S3;
...
ELSE Sn; -- default case
END CASE;

PL/SQL搜索CASE语句

所搜索的CASE语句没有选择WHEN子句包含给布尔值的搜索条件。

语法:

在PL/SQL搜查case语句语法是:

CASE
WHEN selector = 'value1' THEN S1;
WHEN selector = 'value2' THEN S2;
WHEN selector = 'value3' THEN S3;
...
ELSE Sn; -- default case
END CASE;

流程图:

示例:

DECLARE
grade char(1) := 'B';
BEGIN
case
when grade = 'A' then dbms_output.put_line('Excellent');
when grade = 'B' then dbms_output.put_line('Very good');
when grade = 'C' then dbms_output.put_line('Well done');
when grade = 'D' then dbms_output.put_line('You passed');
when grade = 'F' then dbms_output.put_line('Better try again');
else dbms_output.put_line('No such grade');
end case;
END;
/

当上述代码在SQL提示符执行时,它产生了以下结果:

Very good

PL/SQL procedure successfully completed.
 

流程图:

示例:

DECLARE
grade char(1) := 'A';
BEGIN
CASE grade
when 'A' then dbms_output.put_line('Excellent');
when 'B' then dbms_output.put_line('Very good');
when 'C' then dbms_output.put_line('Well done');
when 'D' then dbms_output.put_line('You passed');
when 'F' then dbms_output.put_line('Better try again');
else dbms_output.put_line('No such grade');
END CASE;
END;
/

当上述代码在SQL提示符执行时,它产生了以下结果:

Excellent

PL/SQL procedure successfully completed.

PL/SQL嵌套IF-THEN-ELSE语句

 

PL/SQL编程嵌套if-else语句,可以使用一个IF或ELSE IF语句中的另一个IF或ELSE IF语句。

语法:

IF( boolean_expression 1)THEN
-- executes when the boolean expression 1 is true
IF(boolean_expression 2) THEN
-- executes when the boolean expression 2 is true
sequence-of-statements;
END IF;
ELSE
-- executes when the boolean expression 1 is not true
else-statements;
END IF;

示例:

DECLARE
a number(3) := 100;
b number(3) := 200;
BEGIN
-- check the boolean condition
IF( a = 100 ) THEN
-- if condition is true then check the following
IF( b = 200 ) THEN
-- if condition is true then print the following
dbms_output.put_line('Value of a is 100 and b is 200' );
END IF;
END IF;
dbms_output.put_line('Exact value of a is : ' || a );
dbms_output.put_line('Exact value of b is : ' || b );
END;
/

当上述代码在SQL提示符执行时,它产生了以下结果:

Value of a is 100 and b is 200
Exact value of a is : 100
Exact value of b is : 200 PL/SQL procedure successfully completed.

SQL记录-PLSQL条件控制的更多相关文章

  1. SQL记录-PLSQL记录

    PL/SQL记录   PL/SQL记录就是可以容纳不同类型的数据项的数据结构.记录由不同字段,类似于数据库表的行. 例如,要保留跟踪图书馆中的书籍.可能要跟踪有关每本书下面的属性类似:标题,作者,主题 ...

  2. SQL记录-PLSQL游标

    PL/SQL游标 Oracle会创建一个存储区域,被称为上下文区域,用于处理SQL语句,其中包含需要处理的语句,例如所有的信息,行数处理,等等. 游标是指向这一上下文的区域. PL/SQL通过控制光标 ...

  3. SQL记录-PLSQL循环

    PL/SQL循环   可能有一种情况,当需要执行的代码块的几个多次.在一般情况下,语句顺序执行:一个函数的第一条语句,首先执行,然后是第二个...等等. 编程语言提供了各种控制结构,允许更多复杂的执行 ...

  4. SQL记录-PLSQL触发器

    PL/SQL触发器 触发器是存储程序,它会自动执行或发射当一些事件发生.触发器,事实上,写入响应于以下任一事件将被执行: 数据库操作(DML)语句(DELETE,INSERT,UPDATE或) 数据库 ...

  5. SQL记录-PLSQL基本语法与数据类型

    PL/SQL基本语法 PL/SQL是一种块结构的语言,这意味着PL/SQL程序被划分和编写代码的逻辑块.每块由三个子部分组成: S.N. 段和说明 1 声明 此部分开头使用关键字DECLARE.它是一 ...

  6. SQL记录-PLSQL运算符

    PL/SQL运算符 运算符是一个符号,告诉编译器执行特定的数学或逻辑操作. PL/SQL语言有丰富的内置运算符,运算符提供的以下几种类型: 算术运算符 关系运算符 比较运算符 逻辑运算符 字符串运算符 ...

  7. SQL记录-PLSQL变量与常量文字

    PL/SQL变量   变量是只不过是一个给定的存储区域,程序可以操纵的名称.PL/SQL每个变量具有一个特定的数据类型,它决定了大小和变量的存储器的值,可以说存储器和设置操作可以施加到可变内被存储的范 ...

  8. SQL记录-PLSQL事务

    PL/SQL事务   数据库事务是一个工作的原子单元,其可以由一个或多个相关的SQL语句组成.所谓的原子性就是数据库的修改所带来的构成事务的SQL语句可以集体被提交,即永久到数据库或从数据库中(撤消) ...

  9. SQL记录-PLSQL包

    PL/SQL包 PL/SQL包是组逻辑相关的PL/SQL类型,变量和子程序模式对象. 程序包将有两个强制性的部分: 包装规范定义 包体或定义 包装规范定义 规范是接口到包.它只是声明的类型,变量,常量 ...

随机推荐

  1. exchange 2010 的两个错误

    最近公司要搭建邮件服务器 过程中 碰到两个问题,记录下来. 引以为戒 . 1,登陆界面能出来 但是无论输入什么都显示 乱码.问题原因 身份验证有问题. 如图所示:  改成这个,然后 重启 iis 就可 ...

  2. Vue 入门之 Vuex 实战

    Vue 入门之 Vuex 实战 引言 Vue 组件化做的确实非常彻底,它独有的 vue 单文件组件也是做的非常有特色.组件化的同时带来的是:组件之间的数据共享和通信的难题. 尤其 Vue 组件设计的就 ...

  3. 11.4 Daily Scrum

    今天依旧是学习阶段,大家继续学习安卓的一些相关内容,并尝试将要用到的数据的API应用到程序中去.   Today's tasks  Tomorrow's tasks 丁辛 餐厅列表json/xml数据 ...

  4. Linux内核分析(第三周)

    构造一个简单的linux系统menuOS. 一.简介 1.两把宝剑:中断-上下文的切换(保存现场和恢复现场) 进程-上下文的切换 2.linux-3.18.6 arch/x86目录下的代码是我们重点关 ...

  5. Beta版本总结

    beta 阶段的 postmortem 报告 1. 每个成员在beta 阶段的实践和alpha 阶段有何改进? 成员  Beta阶段的实践和alpha 阶段有何改进  黄山成 beta阶段较alpha ...

  6. Visual Studio 2015的安装和简单的测试

    首先是Visual Studio 2015的安装 Visual Studio是微软开发的一套基于组件的软件开发工具,目前最新的版本是2015. 在 I Tell you 网站下载Visual Stud ...

  7. vue 使用element-ui upload文件上传之后怎么清空

    首先上传组件中一定要绑定这两个属性: ref,和 :file-list,如果没有ref,即使 用 this.$refs.upload.clearFiles()也不行,因为这时候this.$refs为空 ...

  8. C#委托的介绍(delegate、Action、Func、predicate)ga

    转载:http://www.cnblogs.com/akwwl/p/3232679.html 感觉写的很好.例子也很简单明了.赞一个 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参 ...

  9. 百度搜索 “Java面试题” 前200页(面试必看)

    前言 本文中的题目来源于网上的一篇文章<百度搜索 "Java面试题" 前200页>,但该文章里面只有题目,没有答案.因此,我整理了一些答案发布于本文.本文整理答案的原则 ...

  10. Tree Constructing CodeForces - 1003E(构造)

    题意: 就是让构造一个直径为d的树  每个结点的度数不能超过k 解析: 先构造出一条直径为d的树枝 然后去遍历这条树枝上的每个点  为每个点在不超过度数和直径的条件下添加子嗣即可 #include & ...