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