【plsql流程控制】

1.流程控制语句

可以控制程序执行的流程。

2.条件控制

IF 语句

IF 语句根据条件执行一系列语句,有三种形式:IF-THEN、IF-THEN-ELSE 和 IF-THEN-ELSIF

1.if语句

语法:

if 条件表达式 then

  plsql语句;

end if;

语义:如果条件表达式成立,那么执行then后面的plsql代码,如果条件不成立跳过if语句执行其它语句

如:

declare

   --声名一个变量用来存放从键盘输入的值

   v_str varchar2(20);

begin

   --从键盘输入一个颜色字符串存入变量v_str

   v_str:='&请输入一个颜色';

   --判断输入的颜色是否为red,如果是red输出它是红色,如果不是输入其它颜色

   if v_str='red' then

      dbms_output.put_line('它是红色');

   end if;

   if v_str!='red' then

      dbms_output.put_line('其它颜色');

   end if;

end;

2.if else 语句

语法:

  if 条件表达式 then

     plsql语句;

  else

     plsql语句;

  end if;

语义:如果if的条件表达式成立,执行then后面的代码,如果条件不成立执行else后面的代码;

如:

declare

   --声名一个变量用来存放从键盘输入的值

   v_str varchar2(20);

begin

   --从键盘输入一个颜色字符串存入变量v_str

   v_str:='&请输入一个颜色';

   --判断输入的颜色是否为red,如果是red输出它是红色,如果不是输入其它颜色

   if v_str='red' then

      dbms_output.put_line('它是红色');

   else

      dbms_output.put_line('其它颜色');

   end if;

end;

(3)elsif语句

语法:

if 条件表达式1 then

    plsql语句1;

elsif 条件表达式2 then

    plsql语句2;

...

elsif 条件表达式n then

    plsql语句n;

else

    plsql语句;

end if;

语义:如果条件表达式1成立,执行语句1,如果条件1不成立,判断第二个条件表达式,如果成立执行语句2,不成立判断下一条件,如果所有条件都不成立执行else后面的语句.其中elsif可以有多个,else部分可以省略

如:

--根据输入的字符串判断是什么动物

declare

  --声名一个字符串变量保存输入的内容

  v_str varchar2(20);

begin

  --用变量v_str接收输入的数据

  v_str:='&animal';

  --如果是dog,输出它是一只狗

  if v_str='dog' then

    dbms_output.put_line('它是一只狗');

  elsif v_str='cat' then

    --如果是cat,输出它是一只猫

    dbms_output.put_line('它是一只猫');

  elsif v_str='pig' then

    --如果是pig,输出它是一头猪

    dbms_output.put_line('它是一头猪');

  else

    --输出其它生物

    dbms_output.put_line('其它生物');

  end if;

end;

CASE 语句

语法1:

case

   when 条件表达式1 then

        值1;

   when 条件表达式2 then

        值2;

   when 条件表达式3 then

        值3;

     ...

   else

        默认值;

end case;

语法2:

case 条件表达式

  when 值1 then

     plsql语句1;

  when 值2 then

     plsql语句2;

   ...

  when 值n then

     plsql语句n;

  else

     plsql语句;

end case;

语义:如果条件表达式的值,等于某个when后面的值,那么就执行相应then后面的plsql语句,如果表达式的值没在when所列的值中,那么执行else后面的语句,其中else部分可以省略。

 如:

--根据输入的字符串判断是什么动物

declare

  --声名一个字符串变量保存输入的内容

  v_str varchar2(20);

begin

  --用变量v_str接收输入的数据

  v_str:='&animal';

  --如果是dog,输出它是一只狗

  case v_str

  when 'dog' then

    dbms_output.put_line('它是一只狗');

  when 'cat' then

    --如果是cat,输出它是一只猫

    dbms_output.put_line('它是一只猫');

  when 'pig' then

    --如果是pig,输出它是一头猪

    dbms_output.put_line('它是一头猪');

  else

    --输出其它生物

    dbms_output.put_line('其它生物');

  end case;

end;

3.循环控制

循环控制用于重复执行一系列语句

循环控制的三种类型:

LOOP   -   无条件循环

WHILE  -  根据条件循环

FOR  -  循环固定的次数

LOOP 循环

语法:

loop

  plsql语句;

  exit when 退出循环条件;

  循环控制语句;

end loop;

如:

--循环打印1到9的9个数字

declare

  --声名一个变量,用来存放一个数字,(循环变量)

  v_n number(10);  --可以在此处赋值

begin

  --给循环变量赋值为1

  v_n:=1;

  --循环语句

  loop

    --循环体执行的plsql语句

    dbms_output.put_line(''||v_n);

    --退出循环条件

    exit when v_n=9;

    --改变循环变量的值,保证循环不会死循环(循环控制语句)

    v_n:=v_n+1;

  end loop;

  dbms_output.put_line('v_n='||v_n);

end;

exit when:退出循环关键字,如果条件成立立即退出循环

continue:退出本次循环,不会结束循环

return:退出程序,结束整个程序

WHILE 循环    

语法:

 while 循环条件 loop

    循环体语句;

    循环控制语句;

 end loop;

如:

--循环打印1到9

declare

   --声名一个变量,来控制循环

   v_n number(10);

begin

   --给循环变量赋值

   v_n:=1;

   --while循环语句

   while v_n <10 loop

     --循环体语句(打印数字)

     dbms_output.put_line(''||v_n);

     --循环控制语句

     v_n:=v_n+1;

   end loop;

   dbms_output.put_line('v_n='||v_n);

end;

FOR 循环

语法:

for 循环变量 in [reverse] 集合|查询语句|游标变量 loop

  循环体语句;

end loop;

循环变量:不需要在declare中声名,变量类型,根据in后面的集合或者查询语句而定,普通数据类型,record类型

reverse:可选参数,表示循环的方向,不加表示从开始到结尾,加上表示从结尾到开头

数字类型集合写法

 minValue .. maxValue  例如 1..10

如:

--循环打印1 到9

begin

  --for循环语句

  for i in 1..9 loop

    --循环体语句

    dbms_output.put_line(''||i);

  end loop;

end;

for循环查询结果集

--循环打印dept表中的部门信息

begin

  --for循环语句,循环变量v_dept是一个记录类型,查询语句是*,dept%rowtype

  for v_dept in (select * from dept) loop

    --循环体语句,打印部门信息

    dbms_output.put_line(v_dept.deptno||','||v_dept.dname||','||v_dept.loc);

  end loop;   

end;

--循环打印dept表中的部门信息

begin

  --for循环语句,循环变量v_dept是一个记录类型,查询语句是*,dept%rowtype

  for v_dept in (select * from dept where deptno=&deptno) 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 条件;

注意:select into语句查询出的结果只能是一条数据,超过一条数据会报错;

--输入一个部门编号,打印这个部门的信息

declare

  --声名一个变量用来保存输入的部门编号

  v_deptno number(10);

  --声名一个dept%rowtype类型的变量来保存一条部门信息

  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;

--输入一个部门编号,打印这个部门的信息

declare

  --声名一个变量用来保存输入的部门编号

  v_deptno number(10);

  --声名一个变量用来保存部门编号

  v_dno dept.deptno%type;

  --声名一个变量用来存放部门名称

  v_dname dept.dname%type;

  --声名一个变量用来存放部门位置

  v_loc dept.loc%type;

begin

  --接收从键盘输入的部门编号

  v_deptno:=&deptno;

  --根据输入的部门编号查询出部门信息

  select deptno,dname,loc into v_dno,v_dname,v_loc  from dept where deptno=v_deptno;

  --打印部门信息
dbms_output.put_line(v_dno||','||v_dname||','||v_loc);

end;

4.顺序控制

顺序控制用于按顺序执行语句

顺序控制语句包括:

GOTO 语句 -  无条件地转到标签指定的语句

NULL 语句 -  什么也不做的空语句

GOTO 语句

语法:

<<lable>>

循环执行的plsql语句;

if 条件 then

  goto lable;

end if;

<<>>:标签定义符

lable:标签名,符合标识符命名规范

goto语句:程序回到标签处执行

--循环打印1到9

declare

  v_n number(10):=1;

begin

  <<mylable>>

  dbms_output.put_line(''||v_n);

  v_n:=v_n+1;

  if v_n<10 then

    goto mylable;

  end if;

end;

NULL 语句

NULL: plsql中的空语句,它什么也不做,就是占位置

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.房东的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值