2016年2月6日 星期六

基本語法二(IF、迴圈、內部程序) (PL/SQL 二)

※IF條件判斷

DECLARE
    xxx_count number;
BEGIN
    SELECT COUNT(*) INTO xxx_count FROM DEPT;
    
    IF xxx_count < 5 THEN
        DBMS_OUTPUT.PUT_LINE('<5');
    END IF;
END;

※這是單純的IF,和java比起來,還要多THEN和END IF,ELSE要用下面的用法

-- IF ELSE
IF xxx_count < 3 THEN
    DBMS_OUTPUT.PUT_LINE('<3');
ELSE
    DBMS_OUTPUT.PUT_LINE('>3');
END IF;
    
-- IF ELSIF ELSE
IF xxx_count < 5 THEN
    DBMS_OUTPUT.PUT_LINE('<5');
ELSIF xxx_count > 5 THEN
    DBMS_OUTPUT.PUT_LINE('>5');
ELSE
    DBMS_OUTPUT.PUT_LINE('=5');
END IF;
    
-- 正則表達式
IF REGEXP_LIKE(xxx_count, '^\d+$') THEN
    DBMS_OUTPUT.PUT_LINE('是數字');
ELSE
    DBMS_OUTPUT.PUT_LINE('不是數字');
END IF;

※注意是「ELSIF」,不是「ELSEIF」哦

※有支援正則表達式,當然IF裡面也可以再判斷IF ELSE

※布林值:如 b boolean :=false;,除了用 if b = true then ...外,還可用
if not b then ...


等於:=
不等於有三種:!=、<>、^=
大於:>
小於:<
大於等於:>=
小於等於:<=
and、or 可一次判斷多個條件


※LOOP迴圈

DECLARE
    xxx number := 1;
BEGIN
    LOOP
        DBMS_OUTPUT.PUT_LINE(xxx);
        EXIT WHEN xxx = 5;
        xxx := xxx + 1;
    END LOOP;
END;

※如果不設EXIT WHEN會無限迴圈



※WHILE迴圈

WHILE xxx <= 5 LOOP
    DBMS_OUTPUT.PUT_LINE(xxx);
    xxx := xxx + 1;
END LOOP;

※想提早結束要用待會要介紹的EXIT和CONTINUE

※是END LOOP哦!不是END WHILE

※沒有什麼「xxx++」和「+:=」的語法


※FOR迴圈

FOR xxx IN 1..5 LOOP
    DBMS_OUTPUT.PUT_LINE(xxx);
END LOOP;
    
FOR xxx IN REVERSE 1..5 LOOP

※加上 REVERSE是後面開始印出

※IN 後面可下 SQL,但要用圓括號包起來

※是END LOOP哦!不是END FOR



※EXIT和CONTINUE

FOR xxx IN 1..10 LOOP
    IF xxx = 5 THEN
        EXIT;
    END IF;
    
    DBMS_OUTPUT.PUT_LINE(xxx);
END LOOP;

※也就是java的break和continue



※GOTO

FOR xxx IN 1..10 LOOP
    IF xxx = 5 THEN
        GOTO ooo;
    END IF;
    
    DBMS_OUTPUT.PUT_LINE(xxx);
END LOOP;
    
<<ooo>>
DBMS_OUTPUT.PUT_LINE('escape');

※C++也有GOTO,聽說被人用的亂七八槽的,所以java將它變成關鍵字,而且不能使用,一用就編譯錯誤,PL/SQL可以用

※注意<<ooo>>如果寫在FOR迴圈上會無限迴圈



※內部程序

DECLARE
    xxx number := 1;
BEGIN
    DECLARE
        xxx number := 0;
    BEGIN
        DBMS_OUTPUT.PUT_LINE(xxx);
    END;
    
    DBMS_OUTPUT.PUT_LINE(xxx);
END;

※也就是java的內部類別

※和java一樣,內外部如果都宣告一樣的變數名稱,那內部就是找到內部的; 外部就是找到外部的

※java還可以內抓外,外抓內,非常亂,所以開發時,常被禁止內部類別的寫法

沒有留言:

張貼留言