※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還可以內抓外,外抓內,非常亂,所以開發時,常被禁止內部類別的寫法
沒有留言:
張貼留言