熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

PL/SQL基礎教程(二)

2022-06-13   來源: Oracle 

  變量和常量

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

  聲明變量

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

  聲明變量的語法如下

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

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

  給變量賦值

  給變量賦值有兩種方式

   直接給變量賦值

  X:=;

  Y=Y+(X*);

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

  SELECT SUM(SALARY)SUM(SALARY*)

  INTO TOTAL_SALARYTATAL_COMMISSION

  FROM EMPLOYEE

  WHERE DEPT=;

  常量

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

  ZERO_VALUE CONSTANT NUMBER:=;

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

  標量(scalar)數據類型

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

   number

   character

   date/time

   boolean

  表顯示了數字數據類型顯示了字符數據類型顯示了日期和布爾數據類型

  表 Scalar Types:Numeric

  Datatype Range Subtypes description

  BINARY_INTEGER NATURAL

  NATURAL

  NPOSITIVE

  POSITIVEN

  SIGNTYPE

  用於存儲單字節整數

  要求存儲長度低於NUMBER值

  用於限制范圍的子類型(SUBTYPE):

  NATURAL:用於非負數

  POSITIVE:只用於正數

  NATURALN:只用於非負數和非NULL值

  POSITIVEN:只用於正數不能用於NULL值

  SIGNTYPE:只有值:

  NUMBER EE DEC

  DECIMAL

  DOUBLE

  PRECISION

  FLOAT

  INTEGERIC

  INT

  NUMERIC

  REAL

  SMALLINT 存儲數字值包括整數和浮點數可以選擇精度和刻度方式語法

  number[( [])]

  缺省的精度是scale是

  PLS_INTEGER    與BINARY_INTEGER基本相同但采用機器運算時PLS_INTEGER提供更好的性能

  表 字符數據類型

  datatype rang subtype description

  CHAR 最大長度字節 CHARACTER 存儲定長字符串如果長度沒有確定缺省是

  LONG 最大長度字節   存儲可變長度字符串

  RAW 最大長度字節   用於存儲二進制數據和字節字符串當在兩個數據庫之間進行傳遞時RAW數據不在字符集之間進行轉換

  LONGRAW 最大長度   與LONG數據類型相似同樣他也不能在字符集之間進行轉換

  ROWID 個字節   與數據庫ROWID偽列類型相同能夠存儲一個行標示符可以將行標示符看作數據庫中每一行的唯一鍵值

  VARCHAR 最大長度字節 STRINGVARCHAR 與VARCHAR數據類型相似存儲可變長度的字符串聲明方法與VARCHAR相同

  表 DATE和BOOLEAN

  datatype range description

  BOOLEAN TRUE/FALSE 存儲邏輯值TRUE或FALSE無參數

  DATE // BC 存儲固定長的日期和時間值日期值中包含時間

  LOB數據類型

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

   BFILE

   BLOB

   CLOB

   NCLOB

  操作符

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

   算術操作符

   關系操作符

   比較操作符

   邏輯操作符

  算術操作符如表所示

  operator operation

  + 加

  

  / 除

  * 乘

  ** 乘方

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

  operator operation

  < 小於操作符

  <= 小於或等於操作符

  > 大於操作符

  >= 大於或等於操作符

  = 等於操作符

  != 不等於操作符

  <> 不等於操作符

  := 賦值操作符

  表 顯示的是比較操作符

  operator operation

  IS NULL 如果操作數為NULL返回TRUE

  LIKE 比較字符串值

  BETWEEN 驗證值是否在范圍之內

  IN 驗證操作數在設定的一系列值中

  表顯示的是邏輯操作符

  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:=;

  begin

  update emp

  set comm=sal*v_comm_percent

  where deptno=;

  end

  SQL> /

  PL/SQL procedure successfully completed

  SQL>

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

  create or replace procedure update_commission

  (v_dept in numberv_pervent in number default ) is

  begin

  update emp

  set comm=sal*v_percent

  where deptno=v_dept;

  end

  SQL>/

  Procedure created

  SQL>execute update_commission();

  PL/SQL procedure successfully completed

  SQL>

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

  declare

  v_dept number;

  begin

  select adeptno

  into v_dept

  from emp a

  where job=PRESIDENT

  update_commission(v_dept);

  end

  SQL>/

  PL/SQL procedure successfully completed

  SQL>


From:http://tw.wingwit.com/Article/program/Oracle/201311/16606.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.