• 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. 我相信我们成为怎样的人是我们自己的选择。没有人会来拯救你,你必须要自己拯救自己。
  • 相关阅读:
    centos7时间不同步,ntpd时间同步服务
    centos7.6离线安装docker
    安装虚拟机总是获取不到IP地址的解决办法
    安装英伟显卡,出现报错总结
    在ubuntu 安装make
    if,while,for脚本小练习
    python输入密码-隐藏
    Python修改headers参数的两种方法
    Python爬虫 —POST请求有道翻译{"errorcode":50}
    列表转换为字典
  • 原文地址:https://www.cnblogs.com/caroline/p/2285383.html
Copyright © 2020-2023  润新知