1.条件控制语句
IF 语句
IF 语句根据条件执行一系列语句,有三种形式:IF-THEN、 IF-THEN-ELSE 和 IF-THEN-ELSIF
--if语句语法: if 条件表达式 then plsql语句; end if; --如果条件表达式成立,那么执行then后面的plsql代码,如果条件不成立跳过if语句执行其它语句 declare str varchar2(10); begin str:='&选择颜色:'; if str='red' then dbms_output.put_line('红色'); end if; if str!='red' then dbms_output.put_line('不知道'); end if; end; --if else 语句语法: if 条件表达式 then plsql语句; else plsql语句; end if; --如果if的条件表达式成立,执行then后面的代码,如果条件不成立执行else后面的代码; declare v_str varchar2(20); begin v_str:='&请输入一个颜色'; if v_str='red' then dbms_output.put_line('它是红色'); else dbms_output.put_line('其它颜色'); end if; end; --elsif语句语法: if 条件表达式1 then plsql语句1; ... elsif 条件表达式n then plsql语句n; else plsql语句; end if; --如果条件表达式1成立,执行语句1,如果条件1不成立,判断下一个条件表达式,如果所有条件都不成立执行else后面的语句.其中elsif可以有多个,else部分可以省略 declare v_str varchar2(20):='&动物:'; begin if v_str='dog' then dbms_output.put_line('它是一只狗'); elsif v_str='cat' then dbms_output.put_line('它是一只猫'); elsif v_str='pig' then dbms_output.put_line('它是一头猪'); else dbms_output.put_line('不认识'); end if; end;
CASE 语句
case when 条件表达式1 then plsql命令 值1; when 条件表达式2 then 值2; ... else 默认值; end case; --如果条件表达式1成立,那么就执行相应then后面的plsql语句,否则判断下一个条件表达式,如果所有条件都不成立,那么执行else后面的语句,其中else部分可以省略。 declare v_str varchar2(20):='&动物:'; begin case when v_str='dog' then dbms_output.put_line('它是一只狗'); when v_str='cat' then dbms_output.put_line('它是一只猫'); when v_str='pig' then dbms_output.put_line('它是一头猪'); else dbms_output.put_line('不认识'); end case; end;
2.循环控制语句
循环控制用于重复执行一系列语句,分为三种类型:LOOP - 无条件循环;WHILE - 根据条件循环;FOR - 循环固定的次数
LOOP 循环
loop plsql语句; exit when 退出循环条件; 循环控制语句; end loop; --循环打印1到9的9个数字 declare v_n number(10):=1; begin loop dbms_output.put_line(''||v_n); exit when v_n=9; v_n:=v_n+1; end loop; end; exit when:--退出循环关键字,如果条件成立立即退出循环 continue:--退出本次循环,不会结束循环 return:--退出程序,结束整个程序
WHILE 循环
while 循环条件 loop 循环体语句; 循环控制语句; end loop; --循环打印1到9 declare v_n number(10):=1; begin while v_n <10 loop dbms_output.put_line(''||v_n); v_n:=v_n+1; end loop; end;
FOR 循环
for 循环变量 in [reverse] 集合|查询语句|游标变量 loop 循环体语句; end loop; reverse:表示循环的方向,不加表示从开始到结尾,加上表示从结尾到开头 --循环打印1 到9 begin for i in 1..9 loop dbms_output.put_line(''||i); end loop; end; --循环打印dept表中的部门信息 begin for v_dept in (select * from dept) loop dbms_output.put_line(v_dept.deptno||','||v_dept.dname||','||v_dept.loc); end loop; end;
--select into语句(查询出的结果只能是一条数据): select 列名,列名,..,列名 into 变量1,变量2,..,变量n|record变量|rowtype变量 from 表名 where 条件; --输入一个部门编号,打印这个部门的信息 declare v_deptno number(10); v_dept dept%rowtype; begin v_deptno:=&deptno; select * into v_dept from dept where deptno=v_deptno; dbms_output.put_line(v_dept.deptno||','||v_dept.dname||','||v_dept.loc); end;