zoukankan      html  css  js  c++  java
  • PL/SQL控制结构

    IF语句

    1 BEGIN
    2 IF 1 = 2 THEN
    3 DBMS_OUTPUT.PUT_LINE('1=2');
    4 END IF;
    5 END;

    IF/ELSE语句

    1 BEGIN
    2 IF 1 = 2 THEN
    3 DBMS_OUTPUT.PUT_LINE('1=2');
    4 ELSE
    5 DBMS_OUTPUT.PUT_LINE('1<>2');
    6 END IF;
    7 END;

    IF/ELSEIF/ELSE语句

    1 BEGIN
    2 IF 1 > 2 THEN
    3 DBMS_OUTPUT.PUT_LINE('1 > 2');
    4 ELSIF 1 < 2 THEN
    5 DBMS_OUTPUT.PUT_LINE('1 < 2');
    6 ELSE
    7 DBMS_OUTPUT.PUT_LINE('1 = 2');
    8 END IF;
    9 END;

    LOOP循环,基础LOOP循环

    1 DECLARE
    2 V_COUNT NUMBER := 0;
    3 BEGIN
    4 LOOP
    5 V_COUNT := V_COUNT + 1;
    6 DBMS_OUTPUT.PUT_LINE('循环到:' || V_COUNT);
    7 EXIT WHEN V_COUNT = 10;
    8 END LOOP;
    9 END;

    LOOP循环,while__LOOP循环

    1 DECLARE
    2 V_COUNT NUMBER := 0;
    3 BEGIN
    4 WHILE V_COUNT < 10 LOOP
    5 V_COUNT := V_COUNT + 1;
    6 DBMS_OUTPUT.PUT_LINE('循环到:' || V_COUNT);
    7 END LOOP;
    8 END;

    LOOP循环,FOR----LOOP循环

    1 BEGIN
    2 FOR IDX IN 1 .. 10 LOOP
    3 DBMS_OUTPUT.PUT_LINE('循环到:' || IDX);
    4 END LOOP;
    5 END;

    --GOTO语句的使用
    /*
    GOTO label;
    <<label>> /*标号是用<< >>括起来的标识符
    */

    1 BEGIN
    2 FOR IDX IN 1 .. 10 LOOP
    3 DBMS_OUTPUT.PUT_LINE('循环到:' || IDX);
    4 GOTO TEST_11;
    5 END LOOP;
    6 <<TEST_11>> --定义label
    7 DBMS_OUTPUT.PUT_LINE('循环到:' || 'A');
    8 END;

    --NULL值的使用

    1 BEGIN
    2 IF 1 IS NOT NULL THEN
    3 1 DBMS_OUTPUT.PUT_LINE('1 不为空');
    4 END IF;
    5 NULL; --表示不做任何的处理
    6 END;

    --使用函数作为IF的条件

     1 CREATE OR REPLACE FUNCTION TEST_BOOLEAN(I_DEPTNO IN DEPT.DEPTNO%TYPE)
    2 RETURN BOOLEAN IS
    3 V_DEPTNO DEPT.DEPTNO%TYPE;
    4 BEGIN
    5 SELECT D.DEPTNO INTO V_DEPTNO FROM DEPT D;
    6 IF V_DEPTNO IS NULL THEN
    7 DBMS_OUTPUT.PUT_LINE('');
    8 RETURN TRUE;
    9 ELSE
    10 RETURN FALSE;
    11 END IF;
    12 EXCEPTION
    13 WHEN TOO_MANY_ROWS THEN
    14 DBMS_OUTPUT.PUT_LINE('4');
    15 END;
    16
    17 DECLARE
    18 V_DEPTNO DEPT.DEPTNO%TYPE;
    19 BEGIN
    20 IF TEST_BOOLEAN(&部门号码) THEN
    21 DBMS_OUTPUT.PUT_LINE('1');
    22 ELSE
    23 DBMS_OUTPUT.PUT_LINE('2');
    24 END IF;
    25 END;

    CASE语句的两种使用:

     1 DECLARE
    2 V_OUTPUT VARCHAR2(30);
    3 V_ENAME EMP.ENAME%TYPE;
    4 BEGIN
    5 SELECT E.ENAME INTO V_ENAME FROM EMP E WHERE E.EMPNO = 7521;
    6 DBMS_OUTPUT.PUT_LINE('v_ename=' || V_ENAME);
    7 --测试case语句.第一种类型
    8 CASE V_ENAME
    9 WHEN 'SMITH' THEN
    10 DBMS_OUTPUT.PUT_LINE('存在' || V_ENAME);
    11 ELSE
    12 DBMS_OUTPUT.PUT_LINE('不存在');
    13 END CASE;
    14 --测试case语句.第二种类型
    15 CASE
    16 WHEN 'SMITH' = V_ENAME THEN
    17 DBMS_OUTPUT.PUT_LINE('存在' || V_ENAME);
    18 ELSE
    19 DBMS_OUTPUT.PUT_LINE('不存在');
    20 END CASE;
    21 EXCEPTION
    22 WHEN OTHERS THEN
    23 DBMS_OUTPUT.PUT_LINE(SQLERRM);
    24 END;

    --使用CASE语句返回值

     1 DECLARE
    2 BOOLEAN_TRUE BOOLEAN := TRUE;
    3 BOOLEAN_FALSE BOOLEAN := FALSE;
    4 BOOLEAN_NULL BOOLEAN := NULL;
    5 FUNCTION TEST_CASE(I_BOOLEAB IN BOOLEAN) RETURN VARCHAR2 IS
    6 BEGIN
    7 RETURN CASE I_BOOLEAB WHEN TRUE THEN 'TRUE' WHEN FALSE THEN 'FALSE' WHEN NULL THEN '没有执行这个NULL' ELSE 'NULL' END;
    8 END;
    9 BEGIN
    10 DBMS_OUTPUT.PUT_LINE(TEST_CASE(BOOLEAN_TRUE));
    11 DBMS_OUTPUT.PUT_LINE(TEST_CASE(BOOLEAN_FALSE));
    12 DBMS_OUTPUT.PUT_LINE(TEST_CASE(BOOLEAN_NULL));
    13 END;

    --使用CASE语句动态的向存储过程传值

     1 DECLARE
    2 V_DEPTNO DEPT.DEPTNO%TYPE;
    3 PROCEDURE TEST_CASE(I_DEPTNO IN NUMBER) IS
    4 BEGIN
    5 DBMS_OUTPUT.PUT_LINE('调用了过程');
    6 DBMS_OUTPUT.PUT_LINE('DEPTNO:' || I_DEPTNO);
    7 END;
    8 BEGIN
    9 TEST_CASE(CASE WHEN 1 = 1 THEN 1 ELSE 2 END);
    10 END;

    LOOP循环使用EXIT退出的两种方式

     1 DECLARE
    2 V_COUNT NUMBER := 0;
    3 BEGIN
    4 <<LOOP_1>>
    5 WHILE TRUE LOOP
    6 V_COUNT := V_COUNT + 1;
    7 DBMS_OUTPUT.PUT_LINE(V_COUNT);
    8 IF V_COUNT > 10 THEN
    9 EXIT;
    10 END IF;
    11 END LOOP LOOP_1;
    12 V_COUNT := 0;
    13 <<LOOP_2>>
    14 WHILE TRUE LOOP
    15 V_COUNT := V_COUNT + 1;
    16 DBMS_OUTPUT.PUT_LINE(V_COUNT);
    17 EXIT WHEN V_COUNT > 10;
    18 END LOOP LOOP_2;
    19 END;

    --使用标签退出循环

     1 DECLARE
    2 V_COUNT NUMBER := 0;
    3 V_COUNT_INNER NUMBER := 0;
    4 BEGIN
    5 <<LOOP_1>>
    6 WHILE TRUE LOOP
    7 V_COUNT := V_COUNT + 1;
    8 DBMS_OUTPUT.PUT_LINE(V_COUNT);
    9 DBMS_OUTPUT.PUT_LINE('我马上就要退出');
    10 EXIT LOOP_1;
    11 END LOOP LOOP_1;
    12 V_COUNT := 0;
    13 <<LOOP_2>>
    14 WHILE TRUE LOOP
    15 V_COUNT := V_COUNT + 1;
    16 DBMS_OUTPUT.PUT_LINE(V_COUNT);
    17 EXIT WHEN V_COUNT > 10;
    18 <<LOOP_3>>
    19 WHILE TRUE LOOP
    20 V_COUNT_INNER := V_COUNT_INNER + 1;
    21 DBMS_OUTPUT.PUT_LINE(V_COUNT_INNER);
    22 DBMS_OUTPUT.PUT_LINE('我要退出外层循环');
    23 EXIT LOOP_2; --使用标签退出指定的循环,默认只退出本层循环
    24 END LOOP LOOP_3;
    25 V_COUNT_INNER := 0;
    26 END LOOP LOOP_2;
    27 DBMS_OUTPUT.PUT_LINE('成功的退出外层循环');
    28 END;
    I believe that we are who we choose to be. Nobody‘s going to come and save you, you‘ve got to save yourself. 我相信我们成为怎样的人是我们自己的选择。没有人会来拯救你,你必须要自己拯救自己。
  • 相关阅读:
    316 Remove Duplicate Letters 去除重复字母
    315 Count of Smaller Numbers After Self 计算右侧小于当前元素的个数
    313 Super Ugly Number 超级丑数
    312 Burst Balloons 戳气球
    309 Best Time to Buy and Sell Stock with Cooldown 买股票的最佳时间含冷冻期
    Java 类成员的初始化顺序
    JavaScript 全局
    HTML字符实体
    Java中的toString()方法
    JavaScript 弹窗
  • 原文地址:https://www.cnblogs.com/caroline/p/2285383.html
Copyright © 2011-2022 走看看