• oracle数据库的随堂笔记(六)-pl/sql进阶-控制结构


    控制结构
         介绍
              pl/sql中的控制结构:条件语句、循环结构、顺序控制结构……
         1)条件分支语句
              pl/sql中提供了是三种条件分支语句if--then,if--then--else,if--then--elsif--then--else
     
              a.简单的条件判断if--then
                   ?编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该雇员工资增加
              10%
                   create or replace procedure xf_pro1(xfName varchar2) is
                   --定义
                   v_sal emp.sal%type;
                   begin
                   --执行
                   select sal into v_sal from emp where ename=xfName;
         --判断
         if v_sal<2000 then
         update emp set sal=sal+sal*10% where ename=xfName;
         end if;
                   end;
     
                   --调用
                   exec xf_pro1('SCOTT');
     
              b.二重条件分支if--then-else
                   ?编写一个过程,可以输入一个雇员名,如果该雇员的补助不是0就在原来的基础上增加
              100;如果补助为0就把补助设为200;
                   create or replace procedure xf_pro2(xfName varchar2) is
                   v_comm emp.comm%type;
                   begin
                   select comm into v_comm from emp where ename=xfName;
                   if v_comm<>0 then--<>表示不等于
                   update emp set comm=comm+100 where ename=xfName;
                   else
                   update emp set comm=200 where ename=spName;
                   end if;
                   end;
     
              c.多重条件分支if--then--elsif--then--else
                   ?编写一个过程,可以输入一个雇员编号,如果该雇员的职位是PRESIDENT就给他的工资增
              加1000,如果该雇员的职位是MANAGER就给他的工资增加500,其他职位的雇员工资增加
              200。
                   create or replace procedure xf_pro3(xfNo number) is
                   v_job emp.job%type;
                   begin
                   select job into v_job from emp where empno=xfNo;
                   if v_job='PRESIDENT' then
                   update emp set sal=sal+1000 where empno=xfNo;
                   elsif v_job='MANAGER' then
                   update emp set sal=sal+500 where empno=xfNo;
                   else
                   update emp set sal=sal+200 where empno=xfNo;
                   end if;
                   end;
                   
         2)循环语句
              a.loop循环
                   loop是pl/sql中最简单的循环语句,这种语句以loop开头,以end loop结尾,循环体内容至少
              被执行一次。
                   现在有一张表,结构如下:
    用户id 用户名
       
                   请编写一个过程,可输入用户名,并循环添加10个用户到users表中,用户编号从1开始增加
         create table users(userNo number,userName varchar2(40));
     
         create or replace procedure xf_pro4(xfName varchar2) is
         v_num number:=1;
         begin
         loop
              insert into users values(v_num,xfName);
              exit when v_num=10;
              v_num:=v_num+1;
         end loop;
         end;
     
         exec xf_pro4('xiaofei');
     
    b.while循环
         对于while循环来说,只有条件为true时,才会执行循环体语句,while循环以while...loop开始,以end loop结束。
         案例同上
         create or replace procedure xf_pro5(xfName varchar2) is
         v_num number:=11;
         begin
         while v_num<=20 loop
              insert into users values(v_num,xfName);
              v_num:=v_num+1;
         end loop;
         end;
    c.for循环(不推荐使用)
         for循环的基本结构如下:
         begin
              for i in reverse 21..30 loop
              insert into users values(i,'xiaofei');
              end loop;
         end;
         可以看出,控制变量i在隐含中不停增加
         
         3)顺序控制语句goto,null
              a.goto语句
                   goto语句用于跳转到特定符号去执行语句。注意由于使用goto语句会增加程序的复杂性,并          
              使得应用程序可读性变差,所以在做一般应用程序开发时,不建议使用goto语句。(多重循环可 
              以适当使用)    
                   基本语法如下:goto lable,期中lable是已经定义好的标号名。
                   declare
         i int:=1;
         begin
              loop
              dbms_output.put_line('输出i='||i);
              if i=10 then
              goto end_loop;
              end if;
              i:=i+1;
              end loop;
         <<end_loop>>
         dbms_output.put_line('循环结束');
         end;
     
    b.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 empno=&no;
    if v_sal<3000 then
    update emp set comm=sal*0.1 where ename=v_ename;
    else
    null;
    end if;
    end;
                   
                   
    宁可孤独,也不违心。宁可抱憾,也不将就。
  • 相关阅读:
    IT综合学习网站收集
    使用CSS实现表格细边框的三种方式
    安装Ionic遇到的问题
    未能解析此远程名称:'nuget.org' 的解决方法
    webapi 安全验证与权限验证
    iOS模拟器可以编译,真机无法编译
    Mac上安装FFmpeg命令行
    写在工作三周年
    MPMoviePlayerController概述
    NSStream概述
  • 原文地址:https://www.cnblogs.com/fei-er-blog/p/4165475.html
Copyright © 2020-2023  润新知