博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
plsql programming 04 条件和顺序控制
阅读量:6907 次
发布时间:2019-06-27

本文共 2623 字,大约阅读时间需要 8 分钟。

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;

例如:

employee_type 'S' 	award_salary_bonus(employee_id); 'H' 	award_hourly_bonus(employee_id); 'C' 	award_commissioned_bonus(employee_id);	RAISE invalid_employee_type; ;

 

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; 

转载于:https://www.cnblogs.com/moveofgod/p/3443271.html

你可能感兴趣的文章
java xml集合标签_java使用demo4j实现对指定目录下的XML文件指定标签下的内容进行编辑...
查看>>
检查表单行为的JAVA代码_form 表单验证
查看>>
JAVA怎么使用escape_Java中的escape,unescape方法
查看>>
oracle数据库导入导出命令!
查看>>
“Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED”
查看>>
Kryo 为什么比 Hessian 快
查看>>
解读ASP.NET 5 & MVC6系列(11):Routing路由
查看>>
机器学习算法一览图
查看>>
识别出脸部以及给脸部打马赛克
查看>>
[转载]git 忽略某些文件
查看>>
jQuery 效果 - 隐藏和显示
查看>>
正则表达式的使用
查看>>
Android复制iPhone日期和时间选择器
查看>>
[C语言]进阶|指针与字符串
查看>>
检测ORACLE方法汇总数据块损坏
查看>>
Binary Tree Maximum Path Sum [leetcode] dp
查看>>
Xamarin.Android开发实践(八)
查看>>
JSON 常用数据转换
查看>>
MongoDB系列一(索引及C#如何操作MongoDB)
查看>>
解决Android SDK下载和更新失败的方法(Win系统) 和离线安装
查看>>