首页 技术 正文
技术 2022年11月16日
0 收藏 885 点赞 3,862 浏览 2263 个字

1. 条件语句

if salary > 40000 or salary is NULL

then

give_bonus(employee_id, 500);

end if;

if condition

then

else

end if;

if condition

then

statement1

elsif condition

then

statement2

else

statement3

end if;

例如:

IF salary >= 10000 AND salary <=20000 THEN
give_bonus(employee_id, 1500);
ELSIF salary > 20000 AND salary <= 40000 THEN
give_bonus(employee_id, 10000);
ELSIF salary > 40000 THEN
give_bouns(employee_id, 400);
END IF;

嵌套的 IF 语句

IF condition 1 THEN

IF codition 2 THEN

IF condition 3 THEN

statement 3

END IF;

statement 2

END IF;

statement 1

END IF;

像这种嵌套最好不要超过3层, 否则就比较难理解和维护.

2. case 语句

case expression

when result1 then

statement1

when result2 then

statement2

else

statement_else

end case;

例如:

CASE employee_type
WHEN 'S' THEN
award_salary_bonus(employee_id);
WHEN 'H' THEN
award_hourly_bonus(employee_id);
WHEN 'C' THEN
award_commissioned_bonus(employee_id);
ELSE
RAISE invalid_employee_type;
END CASE;

case 作出 if else 效果

CASE TRUE
WHEN salary >= 10000 AND salary <= 20000 THEN

give_bouns(employee_id, 1500);

WHEN salary > 20000 AND salary < 40000 THEN

give_bouns(employee_id, 1000);

ELSE

give_bouns(employee_id, 0);

END CASE;

搜索CASE 模型

CASE

WHEN salary > 40000 THEN

give_bonus(employee_id, 1500);

WHEN salary > 20000 THEN

give_bonus(employee_id, 1000);

ELSE

give_bonus(employee_id, 0);

END CASE;

CASE 规则:

  • 一旦某些语句被执行, 整个执行也就结束了, 即便下边还有结果满足case的表达式, 换言之, 这里的case 自动带有 break,
  • ELSE 语句是可选的, 如果没有指定 ELSE,并且没有一个表达式求值结果是 true, 就会抛出 CASE_NOT_FOUND 异常.
  • WHEN 表达式是按照从上到下的顺序被依次求值.

另外 CASE 语句的边界重叠问题, 要注意, 尽量让 CASE 的条件之间没有任何重叠部分.

CASE 表达式

简单型 CASE 表达式, 例如: (case 后边接表达式, 而这个表达式是我们想要的)

declare

boolean_true BOOLEAN := TRUE;

boolean_false BOOLEAN := FALSE;

boolean_null BOOLEAN;

FUNCTION boolean_to_varchar2(flag IN BOOLEAN) RETURN VARCHAR2 IS

BEGIN”

RETURN

CASE flag

WHEN TRUE THEN ‘True’

WHEN FALSE THEN ‘False’

ELSE ‘NULL’

END;

END;

BEGIN

DBMS_OUTPUT.PUT_LINE(boolean_to_varchar2(boolean_true));

DBMS_OUTPUT.PUT_LINE(boolean_to_varchar2(boolean_false));

DBMS_OUTPUT.PUT_LINE(boolean_to_varchar2(boolean_null));

END;

复杂类型的 case 表达式, case后边不接表达式, 例如:

declare

salary NUMBER := 20000;

employee_id NUMBER := 36325;

bonus_amount NUMBER;

BEGIN

bonus_amount :=

CASE

WHEN salary >= 10000 AND salary <= 20000 THEN 1500

WHEN salary > 20000 AND salary <= 40000 THEN 1000

WHEN salary > 40000 THEN 500

ELSE 0

END * 10;    — 注意这步将结果乘以 10 了

DBMS_OUTPUT.PUT_LINE(bonus_amout);

END;

与 CASE 语句不同, 即使 CASE 表达式中没有 WHEN 子句被选择也不会抛出异常, 相反, 如果没有WHEN条件被满足, CASE 表达式就会返回 NULL.

只要可以使用其他类型表达式的地方, 就可以使用 CASE 表达式, 另外, case表达式只用一个 END; 来作为结尾.

NULL 语句

当你想让 PLSQL 什么也不做时, 就可以使用 NULL 语句, 例如:

IF condition THEN

statment1

ELSE

null;  — do nothing

END IF;

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,918
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,444
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,255
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,069
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,701
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,741