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

Oracle PL/SQL語言基礎

2013-11-13 22:15:39  來源: Oracle 

  PL/SQL是ORACLE對標准數據庫語言的擴展ORACLE公司已經將PL/SQL整合到ORACLE 服務器和其他工具中了近幾年中更多的開發人員和DBA開始使用PL/SQL本文將講述PL/SQL基礎語法結構和組件以及如何設計並執行一個PL/SQL程序
  PL/SQL的優點
  從版本開始PL/SQL就被可靠的整合到ORACLE中了一旦掌握PL/SQL的優點以及其獨有的數據管理的便利性那麼你很難想象ORACLE缺了PL/SQL的情形PL/SQL 不是一個獨立的產品他是一個整合到ORACLE服務器和ORACLE工具中的技術可以把PL/SQL看作ORACLE服務器內的一個引擎sql語句執行者處理單個的sql語句PL/SQL引擎處理PL/SQL程序塊當PL/SQL程序塊在PL/SQL引擎處理時ORACLE服務器中的SQL語句執行器處理pl/sql程序塊中的SQL語句
  PL/SQL的優點如下
   PL/SQL是一種高性能的基於事務處理的語言能運行在任何ORACLE環境中支持所有數據處理命令通過使用PL/SQL程序單元處理SQL的數據定義和數據控制元素
   PL/SQL支持所有SQL數據類型和所有SQL函數同時支持所有ORACLE對象類型
   PL/SQL塊可以被命名和存儲在ORACLE服務器中同時也能被其他的PL/SQL程序或SQL命令調用任何客戶/服務器工具都能訪問PL/SQL程序具有很好的可重用性
   可以使用ORACLE數據工具管理存儲在服務器中的PL/SQL程序的安全性可以授權或撤銷數據庫其他用戶訪問PL/SQL程序的能力
   PL/SQL代碼可以使用任何ASCII文本編輯器編寫所以對任何ORACLE能夠運行的操作系統都是非常便利的
   對於SQLORACLE必須在同一時間處理每一條SQL語句在網絡環境下這就意味作每一個獨立的調用都必須被oracle服務器處理這就占用大量的服務器時間同時導致網絡擁擠而PL/SQL是以整個語句塊發給服務器這就降低了網絡擁擠
  PL/SQL塊結構
  PL/SQL是一種塊結構的語言組成PL/SQL程序的單元是邏輯塊一個PL/SQL 程序包含了一個或多個邏輯塊每個塊都可以劃分為三個部分與其他語言相同變量在使用之前必須聲明PL/SQL提供了獨立的專門用於處理異常的部分下面描述了PL/SQL塊的不同部分
  聲明部分(Declaration section)
  聲明部分包含了變量和常量的數據類型和初始值這個部分是由關鍵字DECLARE開始如果不需要聲明變量或常量那麼可以忽略這一部分需要說明的是游標的聲明也在這一部分
  執行部分(Executable section)
  執行部分是PL/SQL塊中的指令部分由關鍵字BEGIN開始所有的可執行語句都放在這一部分其他的PL/SQL塊也可以放在這一部分
  異常處理部分(Exception section)
  這一部分是可選的在這一部分中處理異常或錯誤對異常處理的詳細討論我們在後面進行
  PL/SQL塊語法
  [DECLARE]
  declaration statements
  BEGIN
  executable statements
  [EXCEPTION]
  exception statements
  END
  PL/SQL塊中的每一條語句都必須以分號結束SQL語句可以使多行的但分號表示該語句的結束一行中可以有多條SQL語句他們之間以分號分隔每一個PL/SQL塊由BEGIN或DECLARE開始以END結束注釋由標示
  PL/SQL塊的命名和匿名
  PL/SQL程序塊可以是一個命名的程序塊也可以是一個匿名程序塊匿名程序塊可以用在服務器端也可以用在客戶端
  命名程序塊可以出現在其他PL/SQL程序塊的聲明部分這方面比較明顯的是子程序子程序可以在執行部分引用也可以在異常處理部分引用
  PL/SQL程序塊可背獨立編譯並存儲在數據庫中任何與數據庫相連接的應用程序都可以訪問這些存儲的PL/SQL程序塊ORACLE提供了四種類型的可存儲的程序
   函數
   過程
  
   觸發器
  函數
  函數是命名了的存儲在數據庫中的PL/SQL程序塊函數接受零個或多個輸入參數有一個返回值返回值的數據類型在創建函數時定義定義函數的語法如下
  FUNCTION name [{parameter[parameter])] RETURN datatypes IS
  [local declarations]
  BEGIN
  execute statements
  [EXCEPTION
  exception handlers]
  END [name]
  過程
  存儲過程是一個PL/SQL程序塊接受零個或多個參數作為輸入(INPUT)或輸出(OUTPUT)或既作輸入又作輸出(INOUT)與函數不同存儲過程沒有返回值存儲過程不能由SQL語句直接使用只能通過EXECUT命令或PL/SQL程序塊內部調用定義存儲過程的語法如下
  PROCEDURE name [(parameter[parameter])] IS
  [local declarations]
  BEGIN
  execute statements
  [EXCEPTION
  exception handlers ]
  END [name]
  包(package)
  包其實就是被組合在一起的相關對象的集合當包中任何函數或存儲過程被調用包就被加載入內存中包中的任何函數或存儲過程的子程序訪問速度將大大加快
  包由兩個部分組成規范和包主體(body)規范描述變量常量游標和子程序包體完全定義子程序和游標
  觸發器(trigger)
  觸發器與一個表或數據庫事件聯系在一起的當一個觸發器事件發生時定義在表上的觸發器被觸發
  變量和常量
  變量存放在內存中以獲得值能被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
   
   
   表 字符數據類型 
   
  表 DATE和BOOLEAN
   
  LOB數據類型
  LOB(大對象Large object) 數據類型用於存儲類似圖像聲音這樣的大型數據對象LOB數據對象可以是二進制數據也可以是字符數據其最大長度不超過GLOB數據類型支持任意訪問方式LONG只支持順序訪問方式LOB存儲在一個單獨的位置上同時一個LOB定位符(LOB locator)存儲在原始的表中該定位符是一個指向實際數據的指針在PL/SQL中操作LOB數據對象使用ORACLE提供的包DBMS_LOBLOB數據類型可分為以下四類
   BFILE
   BLOB
   CLOB
   NCLOB
  操作符
  與其他程序設計語言相同PL/SQL有一系列操作符操作符分為下面幾類
   算術操作符
   關系操作符
   比較操作符
   邏輯操作符
  算術操作符如表所示
   
  關系操作符主要用於條件判斷語句或用於where子串中關系操作符檢查條件和結果是否為true或false是PL/SQL中的關系操作符
   
  表 顯示的是比較操作符
  
  表顯示的是邏輯操作符
  [[The No Picture]]
  執行部分
  執行部分包含了所有的語句和表達式執行部分以關鍵字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 From:http://tw.wingwit.com/Article/program/Oracle/201311/18629.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.