zoukankan      html  css  js  c++  java
  • oracle 条件语句的写法

    1.基本的if else

    DECLARE
     I INT :=1;
     BEGIN
         IF I=1 THEN
           DBMS_OUTPUT.PUT_LINE('TRUE');
         ELSE
            DBMS_OUTPUT.PUT_LINE('FALSE'); 
         END IF;
     
     END;

    2.这里用的是elsif 而不是 else if(注意区分一下就行了)

    DECLARE
    I INT :=1; --如果I=1 满足第一个条件之后,就不会再走第二个条件
               --如果I=5,则直接走最后的一个条件
    BEGIN
        IF I<4 THEN
          DBMS_OUTPUT.PUT_LINE('4');
        ELSIF I<3 THEN
          DBMS_OUTPUT.put_line('3');
        ELSIF I<2 THEN
          DBMS_OUTPUT.PUT_LINE('2');
        ELSE
            DBMS_OUTPUT.PUT_LINE('0');
        END IF;  
    END;

    3.decode语法

    --DECODE('条件',值1,真,假)
    --简单实例一
    
    SELECT DECODE((2-2),0,'TRUE','FALSE') FROM DUAL;  --结果返回true
    
    --简单实例二;比较两个数的大小;
    --先介绍一函数的使用sign() 它只会返回三个值:1 0 -1
    
    SELECT SIGN(2-1) FROM DUAL; --正数就返回1
    
    SELECT SIGN(2-2) FROM DUAL;  --0 就返回0
    
    SELECT SIGN(2-3) FROM DUAL; --负数就返回-1
    
    --然后配合它 我们可以比较两个数的大小滴呀
    
    DECLARE 
        I INT :=2;
        J INT :=3;
        RESULT INT :=0;
        BEGIN 
        SELECT DECODE(SIGN(I-J),-1,I,J) INTO RESULT FROM DUAL; --比较连个数,求最小或者最大的数
        DBMS_OUTPUT.put_line(RESULT); --这样我们就求出了最小的一个数值滴呀
        END;
    
    
    --实例三(字段)
    DECLARE 
        NAME VARCHAR2(99) :='DD';
        RESULT VARCHAR2(99) ;
        BEGIN
        SELECT DECODE(NAME,'JACK','JACK','TOM','TOM','DEFAULUT') INTO RESULT FROM DUAL;
        --第一个参数值 也可以是我们的字段;
        --字段,比较,值1,比较,值2,默认值
        --进行这样的基本模式比较低呀
         DBMS_OUTPUT.put_line(RESULT);
        END;

      DECODE的应用 ,下面我们看这样的一个需求;

    CREATE TABLE STUINFO( 
     ID NUMBER,
     NAME VARCHAR2(40),
     SEX VARCHAR2(4)
    )
    
    INSERT INTO STUINFO VALUES(1,'JACK','');
    
    INSERT INTO STUINFO VALUES(2,'TOM','');
    
    INSERT INTO STUINFO VALUES(3,'ANDY','');
    
    INSERT INTO STUINFO VALUES(4,'CANDY','');
    
    COMMIT;
    
    --现在我们来统计班上 男生多少人,女生多少人;
    --方法一;
    SELECT COUNT(*) FROM STUINFO WHERE SEX='';
    
    SELECT COUNT(*) FROM STUINFO WHERE SEX='';
    
    --方法二;(如果id没有重复的话)
    --我们再求一次和
    --方法虽然有点绕弯,但是可以锻炼我们写sql语句的能力滴呀
    SELECT SUM(MEN_COUNT) "男生总和",SUM(FEMEL_COUNT) "女生总和" FROM (
    SELECT ID,
    SUM(CASE SEX WHEN '' THEN 1 ELSE 0 END) "MEN_COUNT",
    SUM(CASE SEX WHEN '' THEN 1 ELSE 0 END) "FEMEL_COUNT"
    FROM STUINFO
    GROUP BY ID
    )
    
    --方法三,自然就用到我们的DECODE
    --这样用起来的 相当的方便
     SELECT SUM(DECODE(SEX,'',1,0)) "MEN_TOTAL", SUM(DECODE(SEX,'',1,0)) "女生总和" FROM  STUINFO

    4.case when 的用法

      关于学生等级的分法;

    --关于学生成绩 分等级的计算滴呀
    --CASE WHEN 字段  THEN 的用法;
    SELECT NAME,
    CASE WHEN GREADE >85 THEN '优秀'
         WHEN GREADE >70 THEN '良好'
         WHEN GREADE >60 THEN '及格'
         ELSE '不及格'
         END "等级"
    FROM STU
    
    --然后是我们DEcode 的使用方法滴呀
    
     SELECT NAME, DECODE(SIGN(GREADE-85),1,'优秀',0,'优秀',-1,
     DECODE(SIGN(GREADE-70),1,'良好',0,'良好,-1',
     DECODE(SIGN(GREADE-60),1,'及格',0,'及格',-1,'不及格')
     )) "等级"
     FROM STU
  • 相关阅读:
    [网络流24题] 最长k可重区间集问题 (费用流)
    [网络流24题] 方格取数问题/骑士共存问题 (最大流->最大权闭合图)
    [网络流24题] 太空飞行计划问题 (最大流->最大权闭合图)
    [网络流24题] 最小路径覆盖问题 (最大流/匈牙利 二分图匹配)
    [网络流24题] 试题库问题 (最大流)
    [网络流24题] 运输问题 (费用流)
    luogu P4364 [九省联考2018]IIIDX
    loj 6031「雅礼集训 2017 Day1」字符串
    CF702F T-Shirts
    uoj #46[清华集训2014]玄学
  • 原文地址:https://www.cnblogs.com/mc67/p/5593183.html
Copyright © 2011-2022 走看看