zoukankan      html  css  js  c++  java
  • 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;         
    	      


     

      

     

          

  • 相关阅读:
    openssl 生成pfx
    webpack 编译时,提示 Unexpected token: keyword «const»
    .net core 使用 Serilog 作为日志提供者
    k近邻算法
    vscode 无法自动补全第三方库
    centos 7 安装 RabbitMQ
    .net core 发布程序命令(自带运行环境)
    安装node-sass
    .net core 拦截socket
    SDN第三次作业
  • 原文地址:https://www.cnblogs.com/wuyida/p/6300427.html
Copyright © 2011-2022 走看看