Oracle之PL/SQL学习笔记之结构控制(四)

Oracle之PL/SQL学习笔记之结构控制(四)

1. if 条件控制语句

      if语句有三种使用方式: 

  • if ...

  • if ... else

  • if ... elsif ... ... else

  以上三种方式可以根据实际的业务需要灵活选择。需要注意的是,三种情况if结束后都必须是以: end if;结束if条件语句。

1.1 if ...

begin 
  if 1>0 then 
    dbms_output.put_line('1>0');
  end if;
end;


1.2 if ... else ....

begin 
  if 1>=0 then 
    dbms_output.put_line('1>=0');
  else 
    dbms_output.put_line('1<0');
  end if;
end;

1.3 if ... elsif ... elsif ....... else ...

declare 
  v_score number(3);--成绩
begin
   v_score:=&no;--接收控制台输入的值,并且赋值给v_score
  if v_score<60 then 
    dbms_output.put_line('同学需要努力...重修吧'); 
  elsif v_score<=70 then 
    dbms_output.put_line('一般,刚刚及格');
  elsif v_score<=80 then
    dbms_output.put_line('良好');
  else 
    dbms_output.put_line('优秀');
  end if;
end;

  注意:  &no &符号是接收控制台输入 ,:=是赋值操作,记得if结束  end if;

2. case 条件控制语句

    case语句同if语句类似,也是根据条件选择对应的语句执行。

   case有两种形式:

    1. 给出一个表达式,并且把表达式表达式结果同提供的几个可预见的结果做比较,如果比较成功,则执行对应的语句序列

case case_operand 
    when when_operand then 
         statement; 
    when when_operand then 
         statement;
     ....
end case;


2. 提供多个boolean表达式,然后选择第一个为true的表达式,执行对应的脚本。

case when boolean_expression then 
        statement;
     when boolean_expression then
        statement;
        ...
end case;

   

对上面的例子进行改进:

declare 
  c_num number:=1;
begin 
  case when c_num>0  then
    dbms_output.put_line('case:1<0');
  end case;
end;

declare 
  c_num number:=1;
begin 
  case c_num 
    when 0  then
       dbms_output.put_line('case:c_num=0');
    when 1 then 
       dbms_output.put_line('case:c_num=1');
    when 2 then 
        dbms_output.put_line('case:c_num=2');
  end case;
end;


  对比上面的例子,在实际业务中选择合适的条件控制语句。

3. loop循环控制语句

      loop语句也叫循环语句,它能让我们重复地执行指定的语句块。loop语句有以下四种形式:

  •  loop

  • while ... loop

  • for  ... loop

  • cursor for loop

3.1 基本的loop

  

     语法格式:

 loop 
     statement ...;--循环语句
     exit when ...;--退出条件,循环必须要有退出条件,不然就是死循环。
 end loop;

  案例: 打印1,2,3,4,5

declare
  v_num number:=1;
begin
  loop
    exit when v_num>5;
    dbms_output.put_line('v_num='||v_num);
    v_num:=v_num+1;
  end loop;
end;

   另外一种退出循环的方式

declare
  v_num number:=1;
begin
  <<basic_loop>> --定义标签
  loop
    if v_num>5 then
      exit basic_loop;--退出标签,或者使用goto end_basic_loop;
    end if;
    dbms_output.put_line('v_num='||v_num);
    v_num:=v_num+1;
  end loop;
  <<end_basic_loop>>
  null;--这儿是为了防止goto end_basic_loop;然后直接结束块了,估计是防止goto直接退出块了,所以<<end_basic_loop>>后面要有语句
end;

   EXIT默认是终止退出当前的循环,但如果使用标签,可以终止并退出指定的loop循环。

  null;--这儿是为了防止goto end_basic_loop;然后直接结束块了,估计是防止goto直接退出块了,所以<<end_basic_loop>>后面要有语句

3.2 while ... loop

   while ... loop 结构的语句本身可以终止loop循环,当while 后面的布尔表达式为true时,loop和end loop之间为循环体。

 把以上案列该成while ... loop

declare
  v_num number:=1;
begin
  while v_num<=5 loop 
    dbms_output.put_line('v_num='||v_num);
    v_num:=v_num+1;--控制循环条件的,防止死循环
  end loop;
end;

  注意: 自己控制好循环条件,防止死循环.

3.3  for ... loop

 for ... loop 语句的语法结构:

<<label_name>>
for index_name in [reverse] lower_bound .. upper_bound loop
   statement ...
end loop[label_name];

案例1: 求0-20 的整数和

declare
  v_num number:=0;
  v_sum number(8):=0;
begin
  for i in 0 .. 20 loop 
    v_sum:=v_sum+i;
  end loop;
  dbms_output.put_line('1-20的整数和为:'||v_sum);
end;

3.4  cursor for loop 


  在讲游标时,会详细的讲解....... 


4. PL/SQL中的DML,DDL和SELECT

     在PL/SQL中DML语句可以直接执行,但是DDL语句不能直接执行,需要使用execute immediate 命令执行DDL语句

declare 
  v_sql varchar2(2000);
begin
  v_sql:='create table t_test(id number,name varchar2(50))';
  execute immediate v_sql;
end;

 

在PL/SQL中不能直接使用select * from table_name;

需要这样  select * into /*存储数据的变量*/ from table_name 

这样可能导致两种错误:

  no_data_found: 没有数据

 too_many_rows:返回多条记录

未完待续 .....

你可能感兴趣的:(oracle,case,plsql,pl/sql,if,loop)