1. 程式人生 > >PL/SQL控制語句和介紹

PL/SQL控制語句和介紹

where 遊標 名稱 標識符 val 建議 完整性 boolean 超過

----------------------------PL/SQL的組成------------------------------------------------------------
PL/SQL塊由3部分組成:聲明部分、執行部分、異常處理部分
[declare]
--聲明部分:在此聲明PL/SQL用到的變量、類型及遊標,以及局部的存儲過程和函數
begin
--執行部分:過程及SQL語句,即程序的主要部分,不可省略
[exception]
--異常處理部分:錯誤處理
end;
----------------------------PL/SQL變量和常量的聲明--------------------------------------------------

變量:variable_name?data_type[(size)][:=?init_value];
--variable_name表示變量名稱
--data_type表示變量的SQL或PL/SQL數據類型
--size指定變量的範圍。
--init_value指定變量的初始值

--常量:variable_name?CONSTANT?data_type?:=?value;(註意常量必須賦初始值)

----------------------------PL/SQL變量賦值----------------------------------------------------------
方法一:通過select?into?給變量賦值,查詢結果只返回一條數據並賦值到變量中保存,返回多條或零條數據則報錯。

DECLARE
v_ename VARCHAR2(20);
v_rate NUMBER(7,2);
v_no?number;
c_rate_incr CONSTANT NUMBER(7,2):=1.10;
BEGIN
SELECT ename,sal*c_rate_incr INTO v_ename,v_rate FROM emp
WHERE empno=7369;
--方法二:通過賦值操作符":="給變量賦值myseq.nextval取的是索引值11g的新特性
v_ename:=‘SCOTT‘;
v_no:=myseq.nextval;
END;
---------------------------PL/SQL中標識符定義的要求和限制:-----------------------------------------
1)標識符名稱不能超過30個字符。
2)第一個字符必須是字母。
3)不區分大小寫。
4)不能用”-”減號。
5)不能用SQL的保留字。
程序變量 v_開頭
程序常量 c_
遊標變量 cursor_
異常標誌 e_
--------------------------PL/SQL中編碼規則----------------------------------------------------------
(1)利用縮進排列展現邏輯結構。保留字後出現的列開始縮進三個空格,如declare下面聲明變量行。
(2)利用大小寫增強可讀性。保留字統一大寫;?應用程序專用名稱或標識符統一小寫。
(3)格式化單獨語句。每行至多寫一條語句;?聲明語句中盡量保持聲明的數據類型近變量名,而不是與數據類型對齊。
(4)格式化SQL語句。右對齊DML語句的子句中的保留字。

--------------------------註釋-----------------------------------------------------------------------
1)使用雙“-”減號加註釋,只在一行有效,如:
  v_sal?NUMBER(12,2);?--人員的工資變量
2)使用“/*?*/”來加一行或多行註釋,建議使用如下方式
/*
||在註釋首行只放斜線星號,標誌註釋開始
||,然後註釋塊每一行以雙垂直線開頭,突出後面的註釋內容。可以不寫,但為了可讀性
*/
-------------------------PL/SQL數據類型--------------------------------------------------------------
1.標量數據類型,包含單個值,沒有內部組件。包括數字、字符、布爾值和日期時間值。
--例如:CHAR,VARCHAR2,DATE,BOOLEAN等......
2.LOB(Large?OBject)數據類型,用於存儲大的數據對象的類型,主要支持BFILE、BLOB、CLOB、NCLOB類型。
3.屬性類型,屬性用於引用變量或數據庫列的數據類型,以及表示表中一行的記錄類型。
1)%TYPE
--定義一個變量,其數據類型與已經定義的某個數據變量(尤其是表的一列)的數據類型一致。
2)%ROWTYPE
--返回一個記錄類型,其數據類型和數據庫表的數據結構一致。
用法:
DECLARE
v_empno emp.empno%TYPE:=7369;
v_rec emp%ROWTYPE;
BEGIN
SELECT * INTO v_rec FROM emp
WHERE empno=v_empno;
DBMS_OUTPUT.PUT_LINE(‘姓名:‘|| v_rec.ename||‘工資:‘||v_rec.sal);--輸出一行,只在PL/SQL塊中
END;
-----------------------PL/SQL控制語句----------------------------------------------------------------
1.條件控制,用於根據條件執行一系列語句。條件控制包括IF語句和CASE語句。
-----------1)IF語句語法:

IF?<布爾表達式>?THEN --if
???--PL/SQL和SQL語句
END?IF;
--例子:
BEGIN
IF 1=1 THEN
DBMS_OUTPUT.PUT_LINE(‘豬豬‘);
END IF;
END;
  -------------
IF?<布爾表達式>?THEN --if-else
--PL/SQL和SQL語句
ELSE
--其他語句
END?IF;
--例子:
BEGIN
IF 1=2 THEN
DBMS_OUTPUT.PUT_LINE(‘豬豬‘);
ELSE
DBMS_OUTPUT.PUT_LINE(‘狗狗‘);
END IF;
END;
  -------------
IF?<布爾表達式>?THEN --if-else?if-else
--PL/SQL和SQL語句
ELSIF?<其他表達式>?THEN --?這裏是elsif?而不是elseif,註意!!!
--其他語句
ELSIF?<其他表達式>?THEN
--其他語句
ELSE
--其他語句
END?IF;
--例子:
BEGIN
IF 1=2 THEN
DBMS_OUTPUT.PUT_LINE(‘王可可‘);
ELSIF 1=3 THEN
DBMS_OUTPUT.PUT_LINE(‘是‘);
ELSE
DBMS_OUTPUT.PUT_LINE(‘碧池‘);
END IF;
END;

-----------2)CASE語句語法:

--格式一
  CASE?條件表達式
WHEN?條件表達式結果1?THEN?語句段1
WHEN?條件表達式結果2?THEN?語句段2
.....
WHEN?條件表達式結果n?THEN?語句段n
[ELSE?語句段]
END?CASE;
--例子:
DECLARE
v_char VARCHAR2(20);
BEGIN
CASE ‘l‘
WHEN ‘A‘
THEN v_char:=‘優秀‘;
WHEN ‘B‘
THEN v_char:=‘良好‘;
WHEN ‘C‘
THEN v_char:=‘差勁‘;
ELSE
v_char:=‘無語‘;
END CASE;
DBMS_OUTPUT.PUT_LINE(v_char);
END;
--格式二
CASE
WHEN?條件表達式1?THEN?語句段1
WHEN?條件表達式2?THEN?語句段2
.....
WHEN?條件表達式n?THEN?語句段n
[ELSE?語句段]
END?CASE;
--例子:
DECLARE
v_char VARCHAR2(20);
BEGIN
CASE
WHEN 1>2
THEN v_char:=‘優秀‘;
WHEN 1<2
THEN v_char:=‘良好‘;
WHEN 1>8
THEN v_char:=‘差勁‘;
ELSE
v_char:=‘無語‘;
END CASE;
DBMS_OUTPUT.PUT_LINE(v_char);
END;

2.循環控制,用於重復執行的系列語句。包括LOOP和EXIT語句,使用EXIT語句可以立即退出循環;?使用EXIT?WHEN
語句可以根據條件結束循環。有3種類型循環,包括LOOP循環、WHILE循環、FOR循環。

----------1)LOOP循環語法:
LOOP
要執行的語句;
EXIT?WHEN?<條件語句>??--條件滿足,退出循環語句
END?LOOP;
--例子:
DECLARE
v_count NUMBER:=0;
BEGIN
LOOP
v_count:=v_count+1;
DBMS_OUTPUT.PUT_LINE(v_count);
EXIT WHEN v_count=5;
END LOOP;
END;

----------2)WHILE循環語法:
WHILE?<布爾表達式>?LOOP
要執行的語句;
END?LOOP;
--例子:
DECLARE
v_count NUMBER:=0;
BEGIN
WHILE v_count<5 LOOP
v_count:=v_count+1;
DBMS_OUTPUT.PUT_LINE(v_count);
END LOOP;
END;

----------3)FOR循環語法:
FOR?循環計數器?IN?[REVERSE]?下限?....?上限?LOOP
要執行的語句;
END?LOOP;?
例子:
DECLARE
v_num NUMBER:=1;
BEGIN
FOR v_num IN REVERSE 1..10 LOOP --reverse由大到小
DBMS_OUTPUT.PUT_LINE(v_num);
END LOOP;
END;

3.順序控制,用於按順序執行語句。順序控制包括NULL語句和GOTO語句。GOTO語句不推薦使。
NULL語句:是一個可執行語句,相當於一個占位符或不執行任何操作的空語句,可以便某些語句變得有意義,提高程
序的可讀性,保證其他語句結構的完整性和正確性。
--例子:
DECLARE
v_count NUMBER :=5;
BEGIN
DBMS_OUTPUT.PUT_LINE(‘當前值為:‘||v_count);
IF v_count >= 10 THEN
NULL;
ELSE
v_count := v_count +10;
DBMS_OUTPUT.PUT_LINE(‘改變值為:‘||v_count);
END IF;
END;

PL/SQL控制語句和介紹