当前位置: 首页 > news >正文

021.PL-SQL控制结构

无奋斗不青春

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈
优 质 教 程 推 荐:👉👉 Python爬虫从入门到入狱系列 合集👈👈

分隔线
在这里插入图片描述

PL-SQL控制结构

        • 控制结构
        • 条件分支语句
        • 循环语句
        • 顺序控制结构

控制结构
  • 在任何计算机语言(C,JAVA,PASCAL)都有各种控制语句(条件语句、循环结构、顺序控制结构…)。在PL/SQL中也存在这样的控制结构
    • 条件分支语句
    • 循环结构
    • 顺序控制结构

条件分支语句
if...then...
if...then...else...
if...then...elsif...else...
case...when...then...
  1. 简单条件分支语句<if…then…>
  • 案例:编写一个过程,可以输入一个员工姓名,如果该员工工资低于2000,则给该员工工资增加10%
    -- 案例:编写一个过程,可以输入一个员工姓名,如果该员工工资低于2000,则给该员工工资增加10%
    create or replace procedure sp_update_sal(spName varchar2) is
    v_sal emp.sal%type;
    beginselect sal into v_sal from emp where ename=spName;-- 判断工资是否低于2000if v_sal<2000 then-- 工资低于2000,则将工资上涨10%update emp set sal=sal*1.1 where ename=spname;commit;end if;
    end;
    
  1. 二重条件分支 <if…then…else…>
  • 案例:编写一个过程,属于员工姓名,如果该员工的补助不是0,则在原基础上增加100,如果补助为0,则将补助设为200
    create or replace procedure sp_update_comm(spName varchar2) is
    v_comm emp.comm%type;
    beginselect comm into v_comm from emp where ename=spname;if nvl(v_comm,0)<>0 thenupdate emp set comm=comm+100 where ename=spname;elseupdate emp set comm=200 where ename=spname;end if;commit;
    end;
    
  1. 多重条件分支 <if…then…elsif…else…>
  • 案例:编写一个过程,输入一个员工编号,如果该员工的职位是PRESIDENT就给他的工资增加1000,如果该员工的职位是MANAGER,就给他的工资增加500,如果是其他职位则给他工资增加200
    create or replace procedure sp_update_sal2(spno number) is
    v_job emp.job%type;
    beginselect JOB into v_job from emp where empno=spno;if v_job='PRESIDENT' thenupdate emp set sal=sal+1000 where empno=spno;elsif v_job='MANAGER' thenupdate emp set sal=sal+500 where empno=spno;elseupdate emp set sal=sal+200 where empno=spno;end if;commit;
    end;
    
  1. 多重条件分支(case…when…then…)
    create or replace procedure sp_update_sal2(spno number) is
    v_job emp.job%type;
    beginselect JOB into v_job from emp where empno=spno;case v_jobwhen 'PRESIDENT' thenupdate emp set sal=sal+1000 where empno=spno;when 'MANAGER' thenupdate emp set sal=sal+500 where empno=spno;end case;commit;
    end;
    

循环语句
loop...end loop
while...loop...end loop
for...loop...end loop<不建议使用>
  1. Loop循环
    • loop循环:至少循环一次。循环一次之后再做判断,是否继续循环
    • 案例:编写一个过程,可输入用户名,并循环添加十个用户到users表中,用户编号从1开始增加
    create or replace procedure sp_insert_user(spname varchar2) is
    -- 定义变量
    v_num number:=1;
    begin-- 执行循环loop-- 执行insert语句insert into users values(v_num,spname);-- 判断是否满足条件,退出循环exit when v_num=10;-- 变量自增v_num:=v_num+1;end loop;
    end;
    
  2. While循环
    • 只有满足while条件时,才会执行循环语句
    • 案例:编写一个过程,输入用户名,循环添加十个用户到users表中,用户编号从11开始增加
      create or replace procedure sp_insert2_users(spname varchar2) is
      -- 定义变量
      v_num number:=11;
      begin-- 设定循环条件,满足则开始循环while v_num<=20 loop-- 执行insert语句insert into users values(v_num,spname);-- 序号自增v_num:=v_num+1;end loop;
      end;
      
  3. For循环
    • for循环中的控制变量i,是在隐含中不停的增加。无法设置步长,所以不建议使用for循环
    • 基本语法:
      • 正序
      for i in 1..10 loopinsert into users values(i,'失心疯')
      end loop
      
      • 倒序
      for i in reverse 1..10 loopinsert into users values(i,'失心疯')
      end loop
      
    • 案例:编写一个过程,可输入用户名,并循环添加十个用户到users表中,用户编号从21开始增加
      create or replace procedure sp_insert3_users(spname varchar2) is
      beginfor i in 21..30 loopinsert into users values(i,spname);end loop;
      end;
      
    • 拓展:for循环无法直接设置步长,但是可以通过if判断+mod函数来实现
    • 案例:编写一个过程,可输入用户名,并循环添加十个用户到users表中,用户编号均为偶数
      create or replace procedure sp_insert3_users(spname varchar2) is
      beginfor i in 1..20 loopif mod(i,2)=0 theninsert into users values(i,spname);end if;end loop;
      end;
      
      • 在这里插入图片描述

      • 在这里插入图片描述


顺序控制结构
goto语句
null语句
  1. GoTo语句<不建议使用goto语句

    • gogo语句:用于跳转到特定标号取执行语句。
    • 注意:使用goto语句会增加程序的复杂性,并使得应用程序的可读性变差,所以在做一般应用程序开发时,建议大家不要使用goto语句
    • 基本语法:goto lable,其中lable是已经定义好的标号名
    • 示例
      declare
      -- 定义变量i,类型为int
      i int:=1;
      begin-- 循环结构loop-- 在控制台输出dbms_output.put_line('输出i='||i);if i = 10 then-- goto语句,跳转到指定标号名end_loop处goto end_loop;end if;i:=i+1;end loop;-- 指定标号名<<end_loop>>dbms_output.put_line('循环结束');
      end;
      
      • 在这里插入图片描述
  2. Null语句

    • null语句:null语句不会执行任何操作,并且会直接将控制传递到下一条语句。使用null语句的主要好处是可以提高PL/SQL的可读性
    • 示例
    declare-- 定义变量,用于接收查询结果v_sal emp.sal%type;v_ename emp.ename%type;
    begin-- 执行查询语句select ename,sal into v_ename,v_sal from emp where deptno=&no;-- 判断工资是否低于3000,如果为真,则执行更新语句if v_sal<3000 thenupdate emp set comm=v_sal*0.1 where ename=v_ename;else-- 添加null语句。什么都不干,只为了提高可读性null;end if;
    end;
    

http://www.mrgr.cn/news/24925.html

相关文章:

  • 嵌入式硬件基础知识
  • Centos7.9下的snmp搭建及实例
  • 第 7 篇 Helm 部署 Nacos【详细步骤】
  • Java控制台+activiti+springboot+mybatis实现账务报销工作流程
  • 华为OD机试 - 周末爬山 - 广度优先搜索BFS(Python/JS/C/C++ 2024 E卷 200分)
  • 通用与专用LabVIEW软件版本对比
  • MAX3483ESA+T具有±15kV ESD保护的+3.3V、低功耗收发器,适用于RS-485和RS-422通信
  • 【时时三省】tessy 单元测试 集成测试 专栏 文章阅读说明
  • C#里的分治算法和汉诺塔问题
  • 可解释性机器学习的目标
  • c语言位运算符速成
  • SciPy 模块列表
  • 如何删除电脑系统桌面文件右键菜单多余选项
  • 用Blender来烘培模型材质
  • 赋能百业:多模态处理技术与大模型架构下的AI解决方案落地实践
  • 如何在 Ubuntu 系统上部署 Laravel 项目 ?
  • Java 每日一刊(第4期):Java 23 即将发布
  • Ae软件2018-2023全版本 不限速下载
  • C语言 | Leetcode C语言题解之第399题除法求值
  • Python | Leetcode Python题解之第400题第N位数字