Oracel 编写控制结构

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;         
	      


 

  

 

      

原文地址:https://www.cnblogs.com/wuyida/p/6300427.html