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.
我相信我们成为怎样的人是我们自己的选择。没有人会来拯救你,你必须要自己拯救自己。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步