我要投稿
  • 您當前的位置:中國教育資源網 -> 技術教程 -> 數據庫教程 -> ORACLE教程 -> 教程內容
  • [ 收藏本頁教程 ]
  • Oracle PL/SQL語言基礎ORACLE教程

    教程作者:佚名    教程來源:不詳   教程欄目:ORACLE教程    收藏本頁
    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程序的安全性?梢允跈嗷虺蜂N數據庫其他用戶訪問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)

      這一部分是可選的,在這一部分中處理異;蝈e誤,對異常處理的詳細討論我們在后面進行。

      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)

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

    [1] [2] [3] 下一頁  

      變量和常量

      變量存放在內存中以獲得值,能被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
    DatatypeRangeSubtypesdescriptionBINARY_INTEGER-214748-2147483647NATURAL
    NATURAL
    NPOSITIVE
    POSITIVEN
    SIGNTYPE
    用于存儲單字節整數。
    要求存儲長度低于NUMBER值。
    用于限制范圍的子類型(SUBTYPE):
     NATURAL:用于非負數
     POSITIVE:只用于正數
     NATURALN:只用于非負數和非NULL值
     POSITIVEN:只用于正數,不能用于NULL值
     SIGNTYPE:只有值:-1、0或1.NUMBER1.0E-130-9.99E125DEC
    DECIMAL
    DOUBLE
    PRECISION
    FLOAT
    INTEGERIC
    INT
    NUMERIC
    REAL
    SMALLINT存儲數字值,包括整數和浮點數?梢赃x擇精度和刻度方式,語法:
    number[([,])]。
    缺省的精度是38,scale是0.PLS_INTEGER-2147483647-2147483647 與BINARY_INTEGER基本相同,但采用機器運算時,PLS_INTEGER提供更好的性能 。
      表2 字符數據類型
    datatyperangsubtypedescriptionCHAR最大長度32767字節 CHARACTER存儲定長字符串,如果長度沒有確定,缺省是1LONG最大長度2147483647字節 存儲可變長度字符串RAW 最大長度32767字節 用于存儲二進制數據和字節字符串,當在兩個數據庫之間進行傳遞時,RAW數據不在字符集之間進行轉換。LONGRAW最大長度2147483647 與LONG數據類型相似,同樣他也不能在字符集之間進行轉換。ROWID18個字節 與數據庫ROWID偽列類型相同,能夠存儲一個行標示符,可以將行標示符看作數據庫中每一行的唯一鍵值。VARCHAR2最大長度32767字節STRINGVARCHAR與VARCHAR數據類型相似,存儲可變長度的字符串。聲明方法與VARCHAR相同
      表3 DATE和BOOLEAN
    datatyperange descriptionBOOLEANTRUE/FALSE存儲邏輯值TRUE或FALSE,無參數DATE01/01/4712 BC 存儲固定長的日期和時間值,日期值中包含時間
      LOB數據類型

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

    我要投稿   -   廣告合作   -   關于本站   -   友情連接   -   網站地圖   -   聯系我們   -   版權聲明   -   設為首頁   -   加入收藏   -   網站留言
    Copyright © 2009 - 20012 www.mmogirl.net All Rights Reserved.中國教育資源網 版權所有  
     
    潘甜甜七夕果冻传媒在线_月夜影视在线观看免费完整_国产成人18黄网站视频_亚洲无?码国产精品