Oracel 编写控制结构

来源:互联网 发布:什么图案画数据对比表 编辑:程序博客网 时间:2024/05/21 22:25

1、条件分支语句

      在Oracle9i之前,执行条件分支操作都需要使用IF语句来完成,并且PL/SQL中,提供了三种条件分支语句:IF-THEN、IF-THEN-ELSE、IF-THEN-ELSIF.具体的语法如下:

IF condition THEN    statements;[ELSIF condition THEN    statements;] [ELSE      statements ;] END IF; 

注意:ELSIF 是一个单词, END IF 是两个单词 .

下面分别用代码来示例这三种条件的判断:

1.1 简单条件判断 :

如上图所示,当使用简单条件判断时,如果condition 为TRUE,那么PL/SQL执行器会执行THEN后的操作;如果conditon为FALSE或NULL,那么PL/SQL执行器会直接退出条件分支语句。示例如下:

DECLARE     v_sal NUMBER(6,2);BEGIN     SELECT sal INTO v_sal  FROM emp     WHERE lower(ename)=lower('&name');    IF v_sal<2000 THEN         UPDATE emp SET sal=v_sal+200          WHERE  lower(ename)=lower('&name');    END IF;END;  

 

1.2二重条件分支

 

 

示例如下:

DECLARE     v_comm number(6,2); BEGIN      SELECT  comm INTO v_comm          FROM  emp           where  empno=&no;     IF v_comm<>0 THEN          UPDATE emp set comm=v_comm+100             where empno=&no;       ELSE           UPDATE emp set comm=200             where empno=&no;     END IF;                 END;  

 

1.3多重条件分支

 

示例如下:

DECLARE     v_job VARCHAR2(10);    v_sal NUMBER(6,2); BEGIN  SELECT  job,sal INTO v_job,v_sal        FROM emp     WHERE  empno=&no;  IF v_job='PRESIDENT' THEN      UPDATE emp SET sal=v_sal+1000 where empno=&no;  ELSIF  v_job='MANAGER' THEN      UPDATE emp SET sal=v_sal+500 where empno=&no;  ELSE       UPDATE emp SET sal=v_sal+200 where empno=&no;       END IF;END;  

 

2.CASE 语句

  从Oracle 9i 开始,不仅可以使用IF语句执行多重条件分支操作,也可以使用CASE语句执行多重条件分支操作。当处理多重条件分支时,使用CASE语句更加敏捷而且执行效率更好,所以建议大家使用CASE语句。使用CASE语句执行多重条件分支时,有两种方法,第一种方法是使用单一选择符进行等值比较;第二种方法是使用多种条件进行非等值比较。

2.1 在 CASE语句中使用单一选择符进行等值比较

       当使用CASE语句执行多重条件分支时,如果条件选择符完全相同,并且条件表达式为相等条件选择,那么可以选择进行单一条件选择符进行等值比较。语法如下: 

CASE selector      WHEN expression1 THEN sequence_of_statements1;     WHEN expression2   THEN sequence_of_statements1;     ...     WHEN expressionN   THEN sequence_of_statementsN;     [ELSE  sequence_of_statementsN+1;] END CASE;    

字段说明:selectotor 用于指定条件选择符;

                  expression 用于指定条件表达式;

                  sequence_of_statements  用于指定要执行的条件操作;

如果设置的所有条件都不满足,则会执行ELSE后的语句;注意:为了避免CASE_NOT_FOUND例外,在编写CASE语句时,应该带有ELSE子句。示例如下:

DECLARE      v_deptno emp.deptno%TYPE;BEGIN    v_deptno:=&no;    CASE v_deptno        WHEN  10 THEN             UPDATE emp SET  comm=100 WHERE deptno=v_deptno;        WHEN 20 THEN              UPDATE emp SET  comm=200 WHERE deptno=v_deptno;        WHEN 30 THEN              UPDATE emp SET  comm=300 WHERE deptno=v_deptno;        ELSE                dbms_output.put_line('不存在该部门');        END CASE;END;                                


2.2 在CASE语句中使用多种条件比较

      当使用单一条件选择符进行等值比较时,可以使用CASE selector 语法来实现。如果包含有多种条件进行不等值比较,那么必须在WHEN子句中指定比较条件。语法如下: 

CASE     WHEN search_condition1 THEN sequence_of_statements1;     WHEN search_condition2 THEN sequence_of_statements2;    ...    WHEN search_conditionN THEN sequence_of_statementsN;    [ELSE sequence_of_statementsN+1;]END CASE;  

字段说明:serach_condition 用于指定不同的比较条件

                  sequence_of_statemets 用于指定满足特定条件时要指定的操作

 

示例如下:

DECLARE     v_sal emp.sal%TYPE;    v_ename  emp.ename%TYPE;BEGIN SELECT sal,ename INTO v_sal,v_ename         FROM emp         WHERE            empno=&no; CASE      WHEN v_sal <1000 THEN           UPDATE emp SET comm=100 WHERE ename =v_ename;     WHEN v_sal<2000 THEN            UPDATE emp SET comm=200 WHERE ename=v_ename;     WHEN v_sal<6000  THEN            UPDATE emp SET comm=400 WHERE ename=v_ename;  END CASE;END;               


 

 

 

  

 

      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击