zoukankan      html  css  js  c++  java
  • SQL记录-PLSQL条件控制

    PL/SQL条件控制

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

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

    Decision making statements in 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那么第一组码(闭幕结束后,若)将被执行。

    流程图:

    PL/SQL if-then statement

    示例 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块将被执行。

    流程图:

    IF-THEN语句

    示例:

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

    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;

    流程图:

    case statement in PL/SQL

    示例:

    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.
     

    流程图:

    case statement in PL/SQL

    示例:

    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.
  • 相关阅读:
    C++之用程序理解浅拷贝
    es6 | 新增语法 | 总结
    http协议 | http缓存
    Mobx | 强大的状态管理工具 | 可以用Mobx来替代掉redux
    nohup和&后台运行,进程查看及终止
    MIME Type介绍 Content-Type 各种定义
    Meta http-equiv属性详解(转)
    sublme text 3 快捷键
    【坑】【数组的坑】1、对象assign复制的假深度,2、数组slice复制的坑,3、还有数组map复制的坑
    Proxy监听对象的数据变化,处理绑定数据很有用
  • 原文地址:https://www.cnblogs.com/xinfang520/p/7718056.html
Copyright © 2011-2022 走看看