• Oracle读书笔记PL/SQL编程(二)之程序流程


              一、PL/SQL程序流程控制

             上面的结构与其他的高级语言程序一样,就不做介绍了。

             下就条件结构和循环结构说明。

               1IF条件控制句            

                 1.1 IF...THEN语句

                    其语法是:

                    IF  p THEN

                         基本语句段;

                    END IF;

                    例如:

    declare 
      flag1 integer := 1;
      flag2 integer := 2;
    begin
      if flag1 < flag 2 then
        dbms_output.put_line('Flag1<flag2');
       end if;
    end;
    

                   注意:上面的IF END IF必须成对出现

                  1.2  IF...THEN...ELSE语句

                      该语句用于需要在两个语句段之间做出选择时。其语法如下:

                      IF  P  THEN

                           语句段1;

                      ELSE

                          语句段2;

                      EDN IF;

                      在该语句中,如果p的值为true,则执行语句段1,否则执行语句段2;实例:

     1 declare
     2    flag1 integer := 5;
     3    flag2 integer := 8;
     4 begin
     5   if flag1 <flag2 then
     6     dbms_output.put_line('flag1<flag2');
     7   else
     8     dbms_output.put_line('flag1>flag2');
     9   end if;
    10 end;

                  1.3 IF...THEN...ELSIF语句

                        该语句用于在三个或者三个以上的语句段之间做出选择。其语法段为:

                        IF   P1  THEN

                            语句段1;

                        ELSIF P2 THEN

                            语句段2;  

                        ELSE

                           语句段3;

                       END IF;

                        实例:

     1 declare
     2   grade number := 98;
     3   results varchar2(10);
     4 begin
     5   if grade >=90 then
     6     results := '';
     7   elsif grade >= 80 then
     8      results :='';
     9   elsif grade >=70 then
    10      results :='';
    11   elsif grade >= 60 then
    12      results :='及格';
    13   else
    14     results :='';
    15   end if;
    16   dbms_output.put_line(results);
    17 end;

                 1.4 CASE选择控制

                       该语句用于控制多分支选择功能。其实 IF...THEN...ELSIF语句也可以实现这个功能,但是非常的麻烦。其语法结构为:

                       CASE E

                                WHEN e1: THEN  语句段1;

                               WHEN e2: THEN  语句段2 ;

                               WHEN e3: THEN  语句段3;

                               ....................

                               WHEN en: THEN  语句段n ;

                      END CASE;

                       实例:

     1 declare 
     2    results varchar2(20) := 'B';
     3    grade varchar2(20);
     4 begin
     5   case results
     6      when 'A' then grade := '90-100';
     7      when 'B' then grade := '80-89';
     8      when 'C' then grade := '70-79';
     9      when 'D' then grade := '60-69';
    10      when 'E' then grade := '<60';
    11      else grade := '不存在这个成绩等级';
    12   end case;
    13   dbms_output.put_line(grade);
    14 end;

              2)、循环控制

                   2.1 FOR...LOOP语句

                   该形式如下:

                    FOR I [REVERSE]IN lb..hb LOOP

                         语句段;

                    END LOOP;

                    其中,i为整型变量,一般称为循环计算器,lbhb均为整型常量,分别代表了i的下限和上限,..为范围操作符。当没有使用参数REVERSE时,i的初值被设置为lb实例:

    1 declare 
    2    i int := 0;
    3 begin
    4   for i in 1..3 loop
    5     dbms_output.put_line('循环第'||to_char(i)||'次时'||to_char(i));
    6   end loop;
    7 end;


                   2.2 LOOP...EXIT循环控制

                       该语句用于控制死循环的。一般对于死循环的控制,有如下三种方式:

                      2.2.1 利用if语句

                      LOOP 

                          语句段;

                          IF P THEN

                              EXIT

                         END IF;

                      END LOOP;

                      实例:

     1 declare
     2    i int := 0;
     3    results integer := 0;
     4 begin
     5   loop
     6     results := results + i;
     7     if i = 10 then
     8       exit;
     9     end if;
    10     i : i+1;
    11   end loop;
    12   dbms_output.put_line('累加结果为:'||to_char(results));
    13 end;


     

                    2.2.2 利用EXIT...WHEN

                       LOOP

                           .........

                      EXIT WHEN e;

                           .............

                     END LOOP;

                    其中e为布尔表达式,如果e的值为true则循环退出,否则继续执行循环语句。实例:

     1 declare 
     2    i int := 1;
     3    results integer := 0;
     4 begin
     5   loop 
     6     results :=  results+i;
     7     exit when i = 10;
     8     i := i+1;
     9   end loop;
    10   dbms_output.put_line('累加结果为:'||to_char(results));
    11 end;

                    2.2.3: 利用标签

                    该语句的格式如下:

                    <<标签名>>

                    LOOP 

                          .......

                     EXIT  标签名 WHEN e;

                          ........

                    END LOOP;

                    etrue时退出。注意,标签名必须在loop语句之前用“<<>>”定义实例:

     1 declare
     2    i integer := 1;
     3    results integer := 0;
     4 begin
     5   <<my_label>>
     6   loop
     7     results := results + i;
     8     exit my_label when i = 10;
     9     i := i+1;
    10   end loop;
    11   dbms_output.put_line('累加的结果为:'||to_char(results));
    12 end; 

                    2.3 WHILE...LOOP循环控制

                    WHILE e LOOP

                         语句段;

                    END LOOP;

                    E为循环条件,当e的值为true时则执行循环体,否则退出循环。

                    实例:

     1 declare
     2    m integer := 100;
     3    n integer := 7;
     4    results integer;
     5 begin
     6   results := m;
     7   while results >=n loop
     8     results := results - n;
     9   end loop;
    10   dbms_output.put_line(to_char(m)||'除以'||to_char(n)||'的余数'||to_char(results));
    11 end;

             二、在PL/SQL程序中调用SQL语句

              实际上在PL/SQL程序中i调用SQL语句,对于不同的SQL语句调用的方法是不一样的。在这里介绍常用的 几种语句的调用方法。

              2.1调用SELECT语句

              在调用这个语句之间,应该定义一个变量用来存储SELECT语句产生的结果,而且 这个变量的结果要与SELECT之后的字段列表相一致。实例:

    1 declare
    2   temp_emp scott.emp%rowtype;
    3 begin
    4   select * into temp_emp from emp where empno=7369;
    5   dbms_output.put_line(to_char(temp_emp.empno||','||temp_emp.ename));
    6 end;

             注意:这种变量只能是一条记录,否则就会出错。而且如果SELECT语句无返回结果,同样会报错。

              2.2调用INSERT语句

              这条语句可以直接调用。实例:

     1 declare
     2   empno emp.empno%type;
     3   ename emp.ename%type;
     4   job emp.job%type;
     5   mgr emp.mgr%type;
     6   hiredate emp.hiredate%type;
     7   sal emp.sal%type;
     8   comm emp.comm%type;
     9   deptno emp.deptno%type;
    10 begin
    11   empno := 6676;
    12   ename := 'LILY';
    13   job := 'CLERK';
    14   mgr := 7899;
    15   hiredate := to_date('1981-12-12','yyyy-mm-dd');
    16   sal := 999.00;
    17   comm := 433.00;
    18   deptno := 20;
    19   insert into emp values(empno,ename,job,mgr,hiredate,sal,comm,deptno);
    20 end;

             2.3调用UPDATE语句

              同样可以之间调用。实例:

    1 declare
    2   tempno scott.emp.empno%type;
    3 begin
    4   tempno := 7677;
    5   update emp set ename='AAA' where empno = tempno;
    6 end;

             2.4调用DELETE语句

             直接调用。实例:

    1 declare
    2   tempno scott.emp.empno%type;
    3 begin
    4   tempno := 7677;
    5   delete form emp where empno = tempno;
    6 end;
    7   
  • 相关阅读:
    JS仿FLASH特效可跳转回首页的CSS二级联动菜单
    来自Individuality纯CSS打造的笔记本样式的菜单导航
    Jquery仿Flash效果的3款滑动菜单
    简约漂亮的JS下拉风格的导航条
    还不错来自老外的Milonic DHTML/JavaScript Menu菜单导航
    摘自当当网的36类商品分类菜单
    纯CSS实现的蓝色竖向导航代码
    JS打造可折叠展开的导航菜单(Slashdot Menu)
    纯CSS打造的圆角下拉导航菜单
    Jquery仿FLASH特效超漂亮的CSS菜单
  • 原文地址:https://www.cnblogs.com/chenssy/p/2590027.html
Copyright © 2020-2023  润新知