条件控制
-
if …… then…… end if;
-
if ……then ……
else
……
end if;
-
if ……then……
elsif ……then……
……
else……
end if;
declare
v_empno number(10) :=&请输入员工编号;
v_sal emp.sal%type;
v_job emp.job%type;
begin
select job into v_job from emp where empno=v_empno;
if v_job='CLERK'
THEN
UPDATE EMP SET SAL=SAL*4 where empno=v_empno;
elsif v_job='SALESMAN'
THEN
update emp set sal=sal*3 where empno=v_empno;
else
update emp set sal=sal*2 where empno=v_empno;
end if;
end;
- 所有IF类型的条件语句,最后要加上END IF;
- 所有CASE类型的条件语句,最后要加上END CASE;
- 如果判断条件很多,后一个条件被判定的前提是前一个条件结果为false ;
- ELSE部分可根据实际需求决定是否书写;
- CASE语句可以在CASE后写选择器,在WHEN后写常量,通过比较选择器与常量,判断结果是true还是false;
CASE selector
WHEN 'value1' THEN S1;--when 后面不能写条件判断
WHEN 'value2' THEN S2;
WHEN 'value3' THEN S3;
...
ELSE Sn; -- default case
END CASE;
-也可以和oracle中的case when 一样用
CASE WHEN 条件1 THEN S1;
WHEN 条件2 THEN S2;
WHEN 条件3 THEN S3;
...
ELSE Sn; -- default case
END CASE;
- 条件语句中可以继续嵌套条件语句,但不建议嵌套太多层;
- 条件语句的最后和条件语句中的执行部分,最后都要按要求添加英文分号。
循环控制
- 循环必须有退出条件
- 考察先执行后判断还是先判断后执行
- 考察判定条件
- 循环语句的执行顺序非常重要
- 考察循环变量
- 循环条件最好不要用等号
LOOP循环
begin
loop
循环语句
exit when 条件 --符合条件退出循环
end loop;
end;
- exit when 只要在循环体里面即可,位置不做要求
- exit when 判定失败后,后面的语句不会执行,接着运行end loop
while循环
while 条件--不符合条件,不进入循环
loop
end loop;
for循环
- i无需声明
- for循环是按次数条件退出循环
- 循环变量不进入循环
for i in 1..10--从小到大
loop
循环语句
end loop;
for i in reverse 1..10 --从大到小
loop
循环语句
end loop;
- for 后面的u不需要声明
- u是结果集的虚拟表的一条记录,不能直接作为打印的参数
- for循环会遍历结果集的所有记录,然后结束循环
- 这种方式可以定位到结果集中的任意一个数据
- i的类型可以是数字,虚拟表
begin
for u in (select empno,j from emp )--虚拟表
--在表中的别名,下面打印的时候可以直接用
--且定义别名后下面只能使用
--in后面的表中无信息z
loop
dbms_output.put_line (u.empno);由虚拟表定位到字段得到结果集
end loop;
end;