2.PL/SQL——PL/SQL概述及其基本結構

來源:互聯網
上載者:User

標籤:oracle pl/sql 塊結構

一、什麼是PL/SQL

    PL/SQL是對SQL語言的擴充。

    SQL語言是一種非過程性語言,即使用者只需要告訴電腦做什麼,而不需要理解電腦是怎麼做的。比如使用者要查詢一張表裡的某一列資料,只需要輸入:selectCOLUNM_NAME from TABLE_NAME where CONDITION;就可以了,而不需要瞭解電腦是如何查詢的。這既是優點也是缺點,優點就是該語言非常容易學習,缺點則是缺乏過程式控制制,限制了其功能,比如無法進行if...else的條件判斷,也無法進行for迴圈操作。

    基於SQL語言的局限性,於是誕生了PL/SQL。PL/SQL語言提供了條件判斷、迴圈等等普通程式語言具備的功能。SQL語言是一種標準語言,如Oracle、MySQL、SQL_Server等等都支援,而PL/SQL則是Oracle公司專有的,它將過程式控制制和SQL語言無縫結合在一起,從而加強了SQL語言的功能。

 

二、PL/SQL的功能

PL/SQL的功能主要有:

    1. PL/SQL提供了塊結構,從而實現了模組化設計。任何一種程式語言都提供了函數、過程等基本結構,而函數過程都是將一個大的程式模組化,使得程式更容易開發和維護,PL/SQL也不例外。

     2. PL/SQL提供了一些過程化的結構:

                A. 變數(Variables)、常量(Constants)以及多種資料類型;

                B. 提供了條件分支判斷和迴圈結構;

                C. 提供了一次編譯,多次啟動並執行單元。

 

三、PL/SQL的執行機制

    PL/SQL語句在執行時,會分成兩個部分,SQL語言部分由Oracle資料庫核心中的SQL引擎來執行;PL/SQL的塊則會由PL/SQL引擎來執行。

    SQL引擎始終是位於Oracle資料庫裡面的,PL/SQL引擎則可以位於Oracle資料庫內部,也可以獨立於Oracle資料庫而存在。獨立於Oracle資料庫存在的PL/SQL引擎多為一些資料庫開發工具所提供,在用戶端執行,而不是在服務端執行。

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/45/41/wKiom1PlNwmA_a-zAAEU6Rsr06Y709.jpg" title="1.png" alt="wKiom1PlNwmA_a-zAAEU6Rsr06Y709.jpg" />

 

四、PL/SQL的優點

    PL/SQL的優點主要有:

        1. 在SQL語言中整合了一些過程式控制制;

        2. 提高了效能,

                如果單純的使用SQL語言,那麼每執行一條SQL語句,就需要將結果返回到用戶端,由用戶端根據傳回值進行分支控制,然後再執行下一條SQL語句,這個過程會產生大量的I/O操作。

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/45/41/wKiom1PlNxqiqEUsAABUHBrtvoY492.jpg" title="2.png" alt="wKiom1PlNxqiqEUsAABUHBrtvoY492.jpg" />

                與之對應的,使用PL/SQL語言,可以由用戶端將要查詢的業務代碼打包成一個整體,一次性發給Oracle資料庫,甚至很多商務邏輯語句已經整合在Oracle資料庫的核心裡面了,用戶端只需要調用一下即可。資料庫會在服務端完成所有的操作,再一次性將結果返回給用戶端,從而減少了網路資料的傳輸。

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/45/42/wKioL1PlOEHgrjRbAAB0Jide8rE410.jpg" title="3.png" alt="wKioL1PlOEHgrjRbAAB0Jide8rE410.jpg" />

 

        3.支援模組化編程;

        4. Oracle的很多開發工具都支援PL/SQL語言的開發;

        5. 可移植性(主要是在Oracle資料庫之間進行移植,跨資料庫,如MySQL和Oracle之間的移植會比較困難)

        6. 支援異常處理。

 

五、PL/SQL的塊結構

 

PL/SQL語言的基本單元就是塊,塊主要分為以下四個部分:

 

                DECLARE(optional) ——聲明部分

                該部分主要定義以下內容:變數(Variables),常量(Constant),指標(cursor),使用者自訂的異常(User-definedexceptions)等等。

                               

                BEGIN(mandatory)——商務邏輯部分

                該部分主要存放商務邏輯:

                         SQL語句

                         PL/SQL語句

               

                EXCEPTION(optional)——異常處理部分

                 該部分主要進行異常的處理

                               

                END;(mandatory)——結束部分

               

               

       注意,BEGIN 和 END這兩個部分是必須的,而DECLARE和EXCEPTION這兩個部分是可選的,且只在END最後有個分號,其他的地方都沒有。          

 

六、塊的種類

 

PL/SQL的塊主要有以下三種:

 

           A. 匿名塊(Anonymous)

          匿名塊是指沒有起名的塊,它不是儲存在Oracle資料庫裡的,它一旦被執行過就失效了,不能重複使用;它主要用於寫一些測試和臨時使用的語句,其結構如下:

                               

                      [DECLARE]                          

                      BEGIN

                        --statements                                    

                     [EXCEPTION]                     

                     END;

               

           B. 過程塊(Procedure)

           過程塊需要起名字,其中PROCEDURE部分相當於匿名塊中的DECLARE部分。有名字的塊(Procedure和Function)可以儲存在資料庫中反覆調用,用在比較正式的環境下,其結構如下:

                                               

                      PROCEDURE name

                      IS                           

                      BEGIN

                        --statements                                    

                      [EXCEPTION]                     

                      END;

                               

           C. 函數塊(Function)                             

           函數塊也有名字,它和過程塊的區別在於它一定要返回資料,其結構如下:

                               

                       FUNCTION name

                       RETURN datatype

                       IS

                       BEGIN

                         --statements

                       RETURN value;

                       [EXCEPTION]                     

                       END;

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/45/42/wKioL1PlOFuAw5AzAAEQSpSY9TY394.jpg" title="4.png" alt="wKioL1PlOFuAw5AzAAEQSpSY9TY394.jpg" />

 

七、PL/SQL的程式構建

    PL/SQL的程式可以構建在用戶端,也可以構建在服務端,構建在服務端的情況更常見,因為如果構建在用戶端,還需要使用Oracle提供的額外開發工具。

    在用戶端構建的PL/SQL程式主要內容有:匿名塊、過程、函數、包(包是函數和過程的整合)、觸發器和一些其他類型的元素;

    在服務端構建的PL/SQL程式主要內容有:匿名塊、預存程序和函數、包、觸發器和一些其他類型的元素。

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/45/41/wKiom1PlN16h46JtAAHM8LgwBJg479.jpg" title="5.png" alt="wKiom1PlN16h46JtAAHM8LgwBJg479.jpg" />


本文出自 “重劍無鋒 大巧不工” 部落格,請務必保留此出處http://wuyelan.blog.51cto.com/6118147/1537687

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.