oracle学习笔记5:pl/sql流程控制语句

时间:2022-09-08 17:03:59

pl/sql编程中的流程控制语句主要有if语句,case语句以及循环语句

下面将逐个介绍这几个语句

1.if语句

-- 根据员工工资来判断奖金的多少,工资在5000以上的奖金500,工资在3000-5000的奖金300,其他的工资100;
declare
  v_emp emp%rowtype;
  begin
  select * into v_emp from emp where empno=7369;
  if v_emp.sal>=5000 then
    update emp set comm=nvl(comm,0)+500  where empno=v_emp.empno ;
  elsif v_emp.sal<5000 and v_emp.sal>=3000 then
    update emp set comm=nvl(comm,0)+300 where empno=v_emp.empno ;
  else
    update emp set comm=nvl(comm,0)+100  where empno=v_emp.empno ;
  end if;
end;

2.case语句

-- 根据部门的编号判断部门是哪儿里
select deptno,
       case deptno
         when 10 then '研发部'
         when 20 then '市场部'
         when 30 then '人事部'
         end 部门
from dept;

3.循环语句

3.1 loop循环

-- loop循环是最简单的循环
declare
  i number:=1;
  begin
  loop
--     执行循环体
    dbms_output.put_line('hello'||i);
--     退出循环的条件
    exit when i>=5;
    i:=i+1;
  end loop;
end;

3.2 while循环

declare
  i number(2):=1;
  begin
--   while循环,先执行条件,如果条件满足,就执行循环体,否则就不执行
    while i<=5 loop
      dbms_output.put_line('hello'||i);
--       i++;
      i:=i+1;
    end loop;
end;

3.3 for循环

declare
  begin
--   相当于java中的for循环
--   for 递增的变量 in 下限..上限 loop
--       循环体
--   end loop;
    for i in 1..10 loop
      dbms_output.put_line('hello'||i);
  end loop;
end;

3.4 标号和GOTO

-- GOTO label
--   <<label>>
declare
  begin
--   当i=5时,跳出循环
  for i in 1..10 loop
    dbms_output.put_line('hello'||i);
    if i=5 then
      GOTO label;
    end if;
  end loop;
  <<label>>
  dbms_output.put_line('world');
end;