Oracle IF & CASE语句子

IF语句主要出以下三种植为主形式:

一、 IF-THEN语句

       IF CONDITION THEN
           STATEMENT 1;
           …
           STATEMENT N;
       END IF;

二、 IF-THEN-ELSE语句

       IF CONDITION THEN
           STATEMENT 1;
       ELSE
           STATEMENT 2;
       END IF;

三、 ELSLF语句

       IF CONDITION 1 THEN
           STATEMENT 1;
       ELSIF CONDITION 2 THEN
           STATEMENT 2;
       ELSIF CONDITION 3 THEN
           STATEMENT 3;
            …
       ELSE
           STATEMENT N;  –>>在ELSIF语句中,ELSE子句并无是必要的
       END IF

脚,试举无异于条例:用SYSDATE函数判断今天是否是星期,如果是星期来说,判断现在是上午要下午。无论是否是星期天,最后都显得日期。

只顾:IF的嵌套用法及在ELSIF语句中,ELSE子句并无是必不可少的

       DECLARE
             v_day varchar2(10);
             v_time number(2);
       BEGIN
             v_day := RTRIM(to_char(sysdate,'DAY'));
             v_time := to_char(sysdate,'hh24');
             IF v_day in ('SATURDAY','SUNDAY') THEN   -->>下面嵌套了一个ELSIF语句
                     IF v_time >= 6 AND v_time <12 THEN
                            DBMS_OUTPUT.PUT_LINE('Good Moring');
                     ELSIF v_time >=12 AND v_time <=18 THEN
                            DBMS_OUTPUT.PUT_LINE('Good Afternoon');
                     END IF;
             END IF;
             DBMS_OUTPUT.PUT_LINE('The time is: '||to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
        END;

  

CASE语句

CASE语句是个别栽形式:CASE和搜索式CASE。

一、 CASE语句

       CASE SELECTOR
            WHEN EXPRESSION 1 THEN STATEMENT 1;
            WHEN EXPRESSION 2 THEN STATEMENT 2;
            …
            WHEN EXPRESSION N THEN STATEMENT N;
            ELSE STATEMENT N+1;
        END CASE;

下,试举无异于例:用于判断输入数值的奇偶性。

DECLARE
  v_num NUMBER := &user_num;
  v_num_flag NUMBER;
BEGIN
  v_num_flag := MOD(v_num,2);
  CASE v_num_flag
    WHEN 0 THEN
      DBMS_OUTPUT.PUT_LINE(v_num||' is even number');
    ELSE
      DBMS_OUTPUT.PUT_LINE(v_num||' is odd number');
  END CASE;
END;

二、 搜索式CASE语句

       CASE
           WHEN SEARCH CONDITION 1 THEN STATEMENT 1;
           WHEN SEARCH CONDITION 2 THEN STATEMENT 2;
           …
           WHEN SEARCH CONDITION N THEN STATEMENT N;
           ELSE STATEMENT N+1;
       END CASE;

以下用搜索式CASE语句再度写上例  –>>
注意:没有声明v_num_flag变量,直接在WHEN中判断

DECLARE
  v_num NUMBER := &user_num;
BEGIN
  CASE
    WHEN MOD(v_num,2)=0 THEN
      DBMS_OUTPUT.PUT_LINE(v_num||' is even number');
    ELSE
      DBMS_OUTPUT.PUT_LINE(v_num||' is odd number');
  END CASE;
END;

 

CASE表达式

比方是采取CASE表达式,上述CASE语句和搜索式CASE语句可个别又写如下:

一、 对应CASE语句

DECLARE
  v_num NUMBER := &user_num;
  v_num_flag number;
  v_result varchar2(30);
BEGIN
  v_num_flag := MOD(v_num,2);
  v_result :=
    CASE v_num_flag
       WHEN 0 THEN
          v_num||' is even number'
       ELSE
          v_num ||' is odd number'
    END;
  DBMS_OUTPUT.PUT_LINE(v_result);
END;

仲、 对许搜索式CASE语句

DECLARE
  v_num NUMBER := &user_num;
  v_result varchar2(30);
BEGIN
  v_result :=
    CASE
       WHEN MOD(v_num,2) =  0 THEN
          v_num||' is even number'
       ELSE
          v_num ||' is odd number'
    END;
  DBMS_OUTPUT.PUT_LINE(v_result);
END;

顾:CASE语句和CASE表达式之间的语法区别:在CASE语句子被,WHEN和ELSE子句被的但实施报告句以分公司结尾。而在CASE表达式中,WHEN和ELSE子句所含有的表达式的结尾处不是分号。CASE语词以END
CASE终止,CASE表达式以END结尾。

CASE表达式常用于SELECT
INTO语句被,试举无异于条例:

DECLARE
  v_sal_level varchar2(10);
  v_empno number(4) :=&empno;
  v_name varchar2(10);
BEGIN
  SELECT ename,
         CASE
            WHEN sal >= 3000 THEN 'high'
            WHEN sal >= 1000 THEN 'medium'
            ELSE 'low'
         END
    INTO v_name,v_sal_level
    FROM emp
   WHERE EMPNO = v_empno;
   DBMS_OUTPUT.PUT_LINE(v_name||' salary is '||v_sal_level);
END;

 

   

       

相关文章