Oracle條件選擇語句和迴圈語句

來源:互聯網
上載者:User

Oracle條件選擇語句和迴圈語句

Oracle條件選擇語句(IF,CASE)、迴圈語句(LOOP、WHILE和FOR)和順序控制語句(GOTO,NULL)。
1、IF條件選擇語句
1.1 簡單條件判斷

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;
 
 ELSEIF 
 
  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條件選擇語句
2.1 使用單一選擇符進行等值比較

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=80 WHERE deptno=v_deptno;
 
 WHEN 30 THEN
 
  UPDATE emp SET comm=30 WHERE deptno=v_deptno;
 
 ELSE
 
  DBMS_OUTPUT.PUT_LINE('不存在該部門');
 
END CASE;
 
END;

 備忘:ELSE後為不滿足條件時預設處理結果。

2.2 在CASE語句中使用多種條件比較
 當使用單一條件選擇符進行等值比較時,可以使用CASE xxx 文法來實現,如果包含有多種條件進行不等比較,那麼必須在WHEN子句中指定比較條件。

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=80 WHERE ename=v_ename;
 
 WHEN v_sal<6000 THEN
 
  UPDATE emp SET comm=50 WHERE ename=v_ename;
 
END CASE;
 
END;

 
3、LOOP迴圈

 DECLARE
 
 i NUMBER(10):=1;
 
BEGIN
 
 LOOP
 
  DBMS_OUTPUT.PUT_LINE(i); 
 
  i:=i+1;
 
  EXIT WHEN i=10;
 
 END LOOP;
 
END;

備忘:必須使用WHEN子句有條件退出迴圈。
 
4、WHILE迴圈
 基本迴圈至少執行一次迴圈體內的語句,而對於WHILE迴圈來說,只有條件為TRUE才會執行迴圈體內的語句。以WHILE..LOOP 開始 END LOOP結束。

DECLARE
 
 i NUMBER(10):=1;
 
BEGIN
 
 WHILE i<=10 LOOP
 
  DBMS_OUTPUT.PUT_LINE(i);
 
  i:=i+1;
 
 END LOOP;
 
END;

 
5、FOR迴圈

BEGIN
 
 FOR i IN 1..10 LOOP
 
  DBMS_OUTPUT.PUT_LINE(i);
 
 END LOOP;
 
END;

 

 

BEGIN
 
 FOR i IN REVERSE 1..10 LOOP
 
  DBMS_OUTPUT.PUT_LINE(i);
 
 END LOOP;
 
END;

備忘:關鍵字REVERSE表示逆向,即從最大值向下遞減。FOR迴圈可以嵌套。
 
 6、GOTO語句
    無條件跳轉到一個標籤處。eg:goto 標籤名稱;
    備忘:Oracle標籤定義為:<<標籤名稱>>
                Oracle使用兩個單引號表示轉義含義,eg:'''表示一個單引號。
                GOTO語句對系統效能影響很大,建議盡量少用。
 
7、NULL語句
    什麼都不做,只是將控制權交給下一個語句。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.