Oracle PL/SQL語言基礎(轉)

gugu99發表於2007-08-13
Oracle PL/SQL語言基礎(轉)[@more@]

  PL/SQL是ORACLE對標準資料庫語言的擴充套件,ORACLE公司已經將PL/SQL整合到ORACLE 伺服器和其他工具中了,近幾年中更多的開發人員和DBA開始使用PL/SQL,本文將講述PL/SQL基礎語法,結構和元件、以及如何設計並執行一個PL/SQL程式。

  PL/SQL的優點

  從版本6開始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能夠執行的作業系統都是非常便利的

  . 對於SQL,ORACLE必須在同一時間處理每一條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 statementsBEGIN---executable statements[EXCEPTION]---exception statementsEND

  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]BEGINexecute statements[EXCEPTIONexception handlers]END [name]

  過程

  儲存過程是一個PL/SQL程式塊,接受零個或多個引數作為輸入(INPUT)或輸出(OUTPUT)、或既作輸入又作輸出(INOUT),與函式不同,儲存過程沒有返回值,儲存過程不能由SQL語句直接使用,只能透過EXECUT命令或PL/SQL程式塊內部呼叫,定義儲存過程的語法如下:

  PROCEDURE name [(parameter[,parameter,...])] IS[local declarations]BEGINexecute statements[EXCEPTIONexception handlers ]END [name]

  包(package)

  包其實就是被組合在一起的相關物件的集合,當包中任何函式或儲存過程被呼叫,包就被載入入記憶體中,包中的任何函式或儲存過程的子程式訪問速度將大大加快。

  包由兩個部分組成:規範和包主體(body),規範描述變數、常量、遊標、和子程式,包體完全定義子程式和遊標。

  觸發器(trigger)

  觸發器與一個表或資料庫事件聯絡在一起的,當一個觸發器事件發生時,定義在表上的觸發器被觸發。

  變數和常量

  變數存放在記憶體中以獲得值,能被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


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-954154/,如需轉載,請註明出處,否則將追究法律責任。

Oracle PL/SQL語言基礎(轉)
請登入後發表評論 登入
全部評論

相關文章