大数据开发必备技能_第二阶段02_PL/SQL 流程控制语句详解

如果你对大数据开发充满好奇,但苦于零基础不知从何入手,这系列文章就是为你量身定制的!

零门槛入门:无需编程经验,从最基础的SQL查询讲起,手把手带你理解数据操作的核心逻辑。

实战为王:每章附赠真实场景练习题,边学边练,拒绝纸上谈兵。

转行利器:内容直击企业高频需求(数据清洗、分析、可视化),搭配职场避坑指南,助你快速构建“可迁移技能”。

系统进阶:从数据类型到复杂查询,从运算符到执行顺序,层层递进,帮你搭建扎实的大数据地基。

无论你是学生、职场新人,还是想跨界转行的探索者,跟着这份指南,用一杯伯牙绝弦的时间,迈出大数据开发的第一步!

🎉 致亲爱的读者朋友们:
📢 放心追更!本系列文章每日三篇干货更新,助你稳扎稳打!
🎥 配套视频解说正在全力打磨中,即将震撼上线——
🔥 关注收藏不迷路,精彩内容绝不辜负!

目录

  1. 条件分支语句

    • 1.1 IF 语句

      • 1.1.1 IF-THEN-ELSE

      • 1.1.2 IF-THEN-ELSIF-ELSE

      • 1.1.3 嵌套 IF

    • 1.2 CASE 语句

  2. 循环语句

    • 2.1 LOOP 循环

    • 2.2 WHILE LOOP 循环

    • 2.3 FOR LOOP 循环

  3. 练习与示例

  4. 常见面试题

  5. 总结


1. 条件分支语句

1.1 IF 语句

1.1.1 IF-THEN-ELSE

语法

sql

复制

IF 条件 THEN  
   -- 条件为真时执行的代码  
ELSE  
   -- 条件为假时执行的代码  
END IF;  

示例:判断输入数字是否大于 5

sql

DECLARE  
  v_num NUMBER := &输入数字;  
BEGIN  
  IF v_num > 5 THEN  
    DBMS_OUTPUT.PUT_LINE('大于5');  
  ELSE  
    DBMS_OUTPUT.PUT_LINE('不大于5');  
  END IF;  
END;  
 

1.1.2 IF-THEN-ELSIF-ELSE

语法

sql

IF 条件1 THEN  
   -- 条件1为真时执行  
ELSIF 条件2 THEN  
   -- 条件2为真时执行  
ELSE  
   -- 所有条件都不满足时执行  
END IF;  
 

示例:成绩等级判断

sql

DECLARE  
  v_score NUMBER := &输入成绩;  
BEGIN  
  IF v_score >= 90 THEN  
    DBMS_OUTPUT.PUT_LINE('优秀');  
  ELSIF v_score >= 80 THEN  
    DBMS_OUTPUT.PUT_LINE('良好');  
  ELSIF v_score >= 60 THEN  
    DBMS_OUTPUT.PUT_LINE('及格');  
  ELSE  
    DBMS_OUTPUT.PUT_LINE('不及格');  
  END IF;  
END;  
 

1.1.3 嵌套 IF

示例:多层条件判断

sql

DECLARE  
  v_a NUMBER := &a;  
  v_b NUMBER := &b;  
BEGIN  
  IF v_a = 100 THEN  
    DBMS_OUTPUT.PUT_LINE('a=100');  
    IF v_b = 200 THEN  
      DBMS_OUTPUT.PUT_LINE('b=200');  
    END IF;  
  ELSE  
    DBMS_OUTPUT.PUT_LINE('a≠100');  
  END IF;  
END; 
 

注意事项

  • 避免过度嵌套,可通过逻辑优化提升可读性。

  • 使用注释和缩进增强代码结构清晰度。


1.2 CASE 语句

语法

sql

CASE  
  WHEN 条件1 THEN 执行逻辑1  
  WHEN 条件2 THEN 执行逻辑2  
  ELSE 默认逻辑  
END CASE;  
 

示例:判断工资等级

sql

DECLARE  
  v_sal emp.sal%TYPE;  
BEGIN  
  SELECT sal INTO v_sal FROM emp WHERE empno = &员工编号;  
  CASE  
    WHEN v_sal >= 3000 THEN DBMS_OUTPUT.PUT_LINE('高工资');  
    WHEN v_sal = 1500 THEN DBMS_OUTPUT.PUT_LINE('中等工资');  
    ELSE DBMS_OUTPUT.PUT_LINE('低工资');  
  END CASE;  
END;  
 

2. 循环语句

2.1 LOOP 循环

语法

sql

LOOP  
  -- 循环体  
  EXIT WHEN 退出条件;  
END LOOP;  
 

示例:打印 1~5

sql

DECLARE  
  v_i NUMBER := 1;  
BEGIN  
  LOOP  
    DBMS_OUTPUT.PUT_LINE(v_i);  
    v_i := v_i + 1;  
    EXIT WHEN v_i > 5;  
  END LOOP;  
END;  
 

2.2 WHILE LOOP 循环

语法

sql

WHILE 条件 LOOP  
  -- 循环体  
END LOOP;  
 

示例:计算 10 的阶乘

sql

DECLARE  
  v_num NUMBER := &输入数字;  
  v_result NUMBER := 1;  
BEGIN  
  IF v_num > 10 THEN  
    DBMS_OUTPUT.PUT_LINE('输入值过大');  
  ELSE  
    WHILE v_num > 0 LOOP  
      v_result := v_result * v_num;  
      v_num := v_num - 1;  
    END LOOP;  
    DBMS_OUTPUT.PUT_LINE('阶乘结果:' || v_result);  
  END IF;  
END; 
 

2.3 FOR LOOP 循环

语法

sql

FOR 计数器 IN 起始值..结束值 [REVERSE] LOOP  
  -- 循环体  
END LOOP;  
 

示例:计算 1~N 的累加和

sql

DECLARE  
  v_n NUMBER := &输入N;  
  v_sum NUMBER := 0;  
BEGIN  
  FOR i IN 1..v_n LOOP  
    v_sum := v_sum + i;  
  END LOOP;  
  DBMS_OUTPUT.PUT_LINE('累加和:' || v_sum);  
END;  

示例:逆向打印数字

sql

BEGIN  
  FOR i IN REVERSE 1..5 LOOP  
    DBMS_OUTPUT.PUT_LINE(i);  
  END LOOP;  
END;  
 

3. 练习与示例

练习 1:税款计算

根据工资计算税款(≥3000 交 1%,≥1500 交 0.5%,<1500 免税)。

sql

DECLARE  
  v_empno emp.empno%TYPE := &员工编号;  
  v_sal emp.sal%TYPE;  
BEGIN  
  SELECT sal INTO v_sal FROM emp WHERE empno = v_empno;  
  IF v_sal >= 3000 THEN  
    DBMS_OUTPUT.PUT_LINE('需交税:' || v_sal * 0.01);  
  ELSIF v_sal >= 1500 THEN  
    DBMS_OUTPUT.PUT_LINE('需交税:' || v_sal * 0.005);  
  ELSE  
    DBMS_OUTPUT.PUT_LINE('免税');  
  END IF;  
END;  
 

练习 2:百钱买百鸡问题

sql

BEGIN  
  FOR g IN 1..20 LOOP  
    FOR m IN 1..33 LOOP  
      FOR x IN 1..300 LOOP  
        IF g + m + x = 100 AND 5*g + 3*m + x/3 = 100 THEN  
          DBMS_OUTPUT.PUT_LINE('公鸡:' || g || ' 母鸡:' || m || ' 小鸡:' || x);  
        END IF;  
      END LOOP;  
    END LOOP;  
  END LOOP;  
END;  
 

4. 常见面试题

  1. LOOPWHILE LOOPFOR LOOP 的区别是什么?

    • LOOP:需手动控制退出条件,灵活性高。

    • WHILE LOOP:条件为真时执行,适合不确定循环次数。

    • FOR LOOP:遍历固定范围,语法简洁。

  2. 如何在 PL/SQL 中处理多条件分支?

    • 使用 IF-THEN-ELSIF-ELSE 或 CASE 语句。

  3. 如何避免无限循环?

    • 确保循环体内有明确的退出条件(如 EXIT WHEN)。

  4. %TYPE 和 %ROWTYPE 的作用是什么?

    • %TYPE:变量类型与表的某列一致。

    • %ROWTYPE:变量类型与表的某行结构一致。


5. 总结

  • 条件分支IF 适用于复杂逻辑,CASE 适合多条件互斥场景。

  • 循环控制

    • LOOP:灵活但需手动退出。

    • WHILE LOOP:适合条件驱动循环。

    • FOR LOOP:适合遍历固定范围。

  • 实际应用:结合业务场景选择合适结构,如税款计算、数学问题求解等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据小塔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值