PL/SQL教程(二)Data&Variables

 

PL/SQL教程(二)

  變量和常量

  變量存放在內存中以獲得值,能被PL/SQL塊引用。你可以把變量想象成一個可儲藏東西的容器,容器內的東西是可以改變的。

  聲明變量

  變量一般都在PL/SQL塊的聲明部分聲明,PL/SQL是一種強壯的類型語言,這就是說在引用變量前必須首先聲明,要在執行或異常處理部分使用變量,那麼變量必須首先在聲明部分進行聲明。

  聲明變量的語法如下:

Variable_name [CONSTANT] databyte [NOT NULL][:=|DEFAULT expression]

  注意:可以在聲明變量的同時給變量強制性的加上NOT NULL約束條件,此時變量在初始化時必須賦值。

  給變量賦值

  給變量賦值有兩種方式:

  . 直接給變量賦值

   X:=200;
   Y=Y+(X*20);

  . 通過SQL SELECT INTO 或FETCH INTO給變量賦值

SELECT SUM(SALARY),SUM(SALARY*0.1)
INTO TOTAL_SALARY,TATAL_COMMISSION
FROM EMPLOYEE
WHERE DEPT=10;

  常量

  常量與變量相似,但常量的值在程序內部不能改變,常量的值在定義時賦予,,他的聲明方式與變量相似,但必須包括關鍵字CONSTANT。常量和變量都可被定義爲SQL和用戶定義的數據類型。

ZERO_VALUE CONSTANT NUMBER:=0;

  這個語句定了一個名叫ZERO_VALUE、數據類型是NUMBER、值爲0的常量。

  標量(scalar)數據類型

  標量(scalar)數據類型沒有內部組件,他們大致可分爲以下四類:

   . number
   . character
   . date/time
   . boolean

  表1顯示了數字數據類型;表2顯示了字符數據類型;表3顯示了日期和布爾數據類型。

  表1 Scalar Types:Numeric
Datatype Range Subtypes description
BINARY_INTEGER -214748-2147483647 NATURAL
NATURAL
NPOSITIVE
POSITIVEN
SIGNTYPE
用於存儲單字節整數。
要求存儲長度低於NUMBER值。
用於限制範圍的子類型(SUBTYPE):
 NATURAL:用於非負數
 POSITIVE:只用於正數
 NATURALN:只用於非負數和非NULL值
 POSITIVEN:只用於正數,不能用於NULL值
 SIGNTYPE:只有值:-1、0或1.
NUMBER 1.0E-130-9.99E125 DEC
DECIMAL
DOUBLE
PRECISION
FLOAT
INTEGERIC
INT
NUMERIC
REAL
SMALLINT
存儲數字值,包括整數和浮點數。可以選擇精度和刻度方式,語法:
number[([,])]。
缺省的精度是38,scale是0.
PLS_INTEGER -2147483647-2147483647   與BINARY_INTEGER基本相同,但採用機器運算時,PLS_INTEGER提供更好的性能 。

  表2 字符數據類型
datatype rang subtype description
CHAR 最大長度32767字節 CHARACTER 存儲定長字符串,如果長度沒有確定,缺省是1
LONG 最大長度2147483647字節   存儲可變長度字符串
RAW 最大長度32767字節   用於存儲二進制數據和字節字符串,當在兩個數據庫之間進行傳遞時,RAW數據不在字符集之間進行轉換。
LONGRAW 最大長度2147483647   與LONG數據類型相似,同樣他也不能在字符集之間進行轉換。
ROWID 18個字節   與數據庫ROWID僞列類型相同,能夠存儲一個行標示符,可以將行標示符看作數據庫中每一行的唯一鍵值。
VARCHAR2 最大長度32767字節 STRINGVARCHAR 與VARCHAR數據類型相似,存儲可變長度的字符串。聲明方法與VARCHAR相同

  表3 DATE和BOOLEAN
datatype range description
BOOLEAN TRUE/FALSE 存儲邏輯值TRUE或FALSE,無參數
DATE 01/01/4712 BC 存儲固定長的日期和時間值,日期值中包含時間

  LOB數據類型

  LOB(大對象,Large object) 數據類型用於存儲類似圖像,聲音這樣的大型數據對象,LOB數據對象可以是二進制數據也可以是字符數據,其最大長度不超過4G。LOB數據類型支持任意訪問方式,LONG只支持順序訪問方式。LOB存儲在一個單獨的位置上,同時一個"LOB定位符"(LOB locator)存儲在原始的表中,該定位符是一個指向實際數據的指針。在PL/SQL中操作LOB數據對象使用ORACLE提供的包DBMS_LOB.LOB數據類型可分爲以下四類:

  . BFILE
  . BLOB
  . CLOB
  . NCLOB

  操作符

  與其他程序設計語言相同,PL/SQL有一系列操作符。操作符分爲下面幾類:

  . 算術操作符

  . 關係操作符

  . 比較操作符

  . 邏輯操作符

  算術操作符如表4所示

operator operation
+
-
/
*
** 乘方

  關係操作符主要用於條件判斷語句或用於where子串中,關係操作符檢查條件和結果是否爲true或false,表5是PL/SQL中的關係操作符

operator operation
< 小於操作符
<= 小於或等於操作符
> 大於操作符
>= 大於或等於操作符
= 等於操作符
!= 不等於操作符
<> 不等於操作符
:= 賦值操作符

  表6 顯示的是比較操作符
operator operation
IS NULL 如果操作數爲NULL返回TRUE
LIKE 比較字符串值
BETWEEN 驗證值是否在範圍之內
IN 驗證操作數在設定的一系列值中

  表7.8顯示的是邏輯操作符
operator operation
AND 兩個條件都必須滿足
OR 只要滿足兩個條件中的一個
NOT 取反

  執行部分

  執行部分包含了所有的語句和表達式,執行部分以關鍵字BEGIN開始,以關鍵字EXCEPTION結束,如果EXCEPTION不存在,那麼將以關鍵字END結束。分號分隔每一條語句,使用賦值操作符:=或SELECT INTO或FETCH INTO給每個變量賦值,執行部分的錯誤將在異常處理部分解決,在執行部分中可以使用另一個PL/SQL程序塊,這種程序塊被稱爲嵌套塊

  所有的SQL數據操作語句都可以用於執行部分,PL/SQL塊不能再屏幕上顯示SELECT語句的輸出。SELECT語句必須包括一個INTO子串或者是遊標的一部分,執行部分使用的變量和常量必須首先在聲明部分聲明,執行部分必須至少包括一條可執行語句,NULL是一條合法的可執行語句,事物控制語句COMMIT和ROLLBACK可以在執行部分使用,數據定義語言(Data Definition language)不能在執行部分中使用,DDL語句與EXECUTE IMMEDIATE一起使用或者是DBMS_SQL調用。

  執行一個PL/SQL塊

  SQL*PLUS中匿名的PL/SQL塊的執行是在PL/SQL塊後輸入/來執行,如下面的例子所示:

declare
 v_comm_percent constant number:=10;
begin
 update emp
 set comm=sal*v_comm_percent
 where deptno=10;
 end
SQL> /
PL/SQL procedure successfully completed.

SQL>

  命名的程序與匿名程序的執行不同,執行命名的程序塊必須使用execute關鍵字:

create or replace procedure update_commission
 (v_dept in number,v_pervent in number default 10) is
begin
 update emp
 set comm=sal*v_percent
 where deptno=v_dept;
end

SQL>/

Procedure created

SQL>execute update_commission(10,15);

PL/SQL procedure successfully completed.

SQL>


  如果在另一個命名程序塊或匿名程序塊中執行這個程序,那麼就不需要EXECUTE關進字。

declare
 v_dept number;
begin
 select a.deptno
 into v_dept
 from emp a
 where job='PRESIDENT'
 update_commission(v_dept);
end
SQL>/
 PL/SQL procedure successfully completed
SQL>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章