• PL/SQL之--流程控制语句


    一、简介

      像编程语言一样,oracle PL/SQL也有自己的流程控制语句。通过流程控制语句,我们可以在PL/SQL中实现一下比较复杂的业务逻辑操作。而无需到程序中去控制,在一定程度上提高了效率,这也是PL/SQL的强大之处。PL/SQL流程控制语句有如下几种:

    • 控制语句: 包括IF 语句、CASE语句
    • 循环语句: 包括LOOP语句, WHILE语句、FOR语句
    • 顺序语句: 包括GOTO语句

    二、语句种类

      1、控制语句

        a、IF语句

           语法如下:

            IF 条件语句 TEHN 执行语句

            ELSIF 条件语句 TEHN 执行语句

            ELSE 执行语句

            END IF;

          示例如下:

    DECLARE
        i number;
        str VARCHAR2(18) := 'b';
    BEGIN
        --数字判断
        if(i = 6) THEN    
                NULL; -- 如果什么都不做建议写null,保证语句的完整性
        ELSIF(i is null) THEN
             dbms_output.put_line('null');
        ELSE
            dbms_output.put_line('null');
        END IF;
        
        --    字符串判断
        if(str = 'a') THEN
            dbms_output.put_line('if');
        ELSIF (str = 'b') THEN
            dbms_output.put_line('elsif');
        ELSE
            dbms_output.put_line('else');
        END IF;
    END;

        b、CASE语句

          语法如下:

          1、变量判断

            CASE 变量

            WHEN 值 THEN 执行语句

            WHEN 值 THEN 执行语句

                       END CASE;

                     2、表达式判断

           CASE

           WHEN 表达式 TEHN 执行语句

           WHEN 表达式 TEHN 执行语句

                        END CASE;

          示例代码如下:

    DECLARE
        str VARCHAR2(18) := 'B';
        num NUMBER := 60;
        strresult VARCHAR2(10);
        numresult VARCHAR2(10);
    BEGIN
        -- 变量判断
        CASE str    
            WHEN 'A' THEN strresult := '优秀';
            WHEN 'B' THEN strresult := '良好';
            WHEN 'C' THEN strresult := '合格';
            WHEN 'D' THEN strresult := '不及格';
        END CASE;
        --表达式判断
        CASE
            WHEN num < 60 THEN numresult := '不及格';
            WHEN num < 70 THEN numresult := '合格';
            WHEN num < 70 THEN numresult := '良好';
            WHEN num < 70 THEN numresult := '优秀';
        END CASE;
        
        dbms_output.put_line(strresult);
        dbms_output.put_line(numresult);
    END;

      2、循环语句

        a、LOOP语句

          语法如下:

           LOOP

           执行语句

           EXIT WHEN 条件      

           END LOOP;

          示例代码:

    DECLARE
        i NUMBER := 0 ;
    BEGIN
        LOOP 
            i := i + 1 ; 
            dbms_output.put_line (i) ; 
            EXIT WHEN i = 5 ;
        END LOOP ;
    END ;

        b、WHILE语句

          语法如下:

           WHILE 条件 LOOP

           执行语句

           END LOOP;

    -- 打印i每次增加后的值
    DECLARE
        i NUMBER := 0 ;
    BEGIN
        WHILE i < 5 LOOP 
            i := i + 1 ; 
            dbms_output.put_line ('i:' || i) ;
        END LOOP ;
    END ;

        c、FOR语句

                  语法如下:

          FOR 变量 IN (REVERSE) 数字 .. 数字 LOOP

          执行语句

          END LOOP;

         加上REVERSE就是数字的逆序。

         示例代码如下:

    -- index 是for开始就定了的
    BEGIN
        -- 打印1到5之前的数
        FOR i IN 1 .. 5 LOOP 
            dbms_output.put_line ('i:' || i) ;
        END LOOP ; 
        -- 打印5-到20的数,逆序打印
        FOR j IN REVERSE 5 .. 20 LOOP 
            dbms_output.put_line ('j:' || j) ;
        END LOOP ;
    END ;

      3、顺序语句

        a、GOTO语句

          语法如下:

          GOTO label;

          GOTO语句一般都是由某行跳到另外一行。

           示例代码如下:

     1 DECLARE
     2     i NUMBER := 1 ;
     3 BEGIN
     4     loop 
     5         dbms_output.put_line (i) ; 
     6         i := i + 1 ;
     7     IF i = 10 THEN
     8         GOTO label ;
     9     END IF ;
    10 END loop ;
    11     << label >> 
    12     dbms_output.put_line ('label') ;
    13 END;

           本例子就i一直循环加一,当i等于10时,跳出循环,跳到第11行并执行。 

  • 相关阅读:
    leetcode 86. Partition List
    leetcode 303. Range Sum Query
    leetcode 1310. XOR Queries of a Subarray
    leetcode 1309. Decrypt String from Alphabet to Integer Mapping
    leetcode 215. Kth Largest Element in an Array
    将numpy.ndarray写入excel
    leetcode 1021 Remove Outermost Parentheses
    leetcode 1306. Jump Game III
    leetcode 1305. All Elements in Two Binary Search Trees
    ICCV2019 oral:Wavelet Domain Style Transfer for an Effective Perception-distortion Tradeoff in Single Image Super-Resolution
  • 原文地址:https://www.cnblogs.com/always-online/p/3974946.html
Copyright © 2020-2023  润新知