1. 程式人生 > 實用技巧 >第19課 使用儲存過程

第19課 使用儲存過程

第19課 使用儲存過程

19.1 儲存過程

簡單來說,儲存過程就是為以後使用而儲存的一條或多條SQL語句。可將其視為批檔案,雖然它們的作用不僅限於批處理。

19.2 為什麼要使用儲存過程

理由很多,下面列出一些主要的。

  • 通過把處理封裝在一個易用的單元中,可以簡化複雜的操作(如前面例子所述)。
  • 由於不要求反覆建立一系列處理步驟,因而保證了資料的一致性。
  • 簡化對變動的管理。如果表名、列名或業務邏輯(或別的內容)有變化,那麼只需要更改儲存過程的程式碼。

19.3 執行儲存過程

執行儲存過程的SQL語句很簡單,即EXECUTE。EXECUTE接受儲存過程名和需要傳遞給它的任何引數。

EXECUTE AddNewProduct( 'JTS01', 
                       'Stuffed Eiffel Tower', 
                       6.49,
                       'Plush stuffed toy with the text LaTour Eiffel in red white and blue' );

這裡執行一個名為AddNewProduct的儲存過程,將一個新產品新增到Products表中。

19.4 建立儲存過程

下面是該過程的Oracle版本:

CREATE PROCEDURE MailingListCount (
  ListCount OUT INTEGER
)
IS
v_rows INTEGER;
BEGIN
    SELECT COUNT(*) INTO v_rows
    FROM Customers
    WHERE NOT cust_email IS NULL;
    ListCount := v_rows;
END;

這個儲存過程有一個名為ListCount的引數。此引數從儲存過程返回一個值而不是傳遞一個值給儲存過程。關鍵字OUT用來指示這種行為。Oracle支援IN(傳遞值給儲存過程)、OUT(從儲存過程返回值,如這裡)、INOUT(既傳遞值給儲存過程也從儲存過程傳回值)型別的引數。儲存過程的程式碼括在BEGIN和END語句中,這裡執行一條簡單的SELECT語句,它檢索具有郵件地址的顧客。然後用檢索出的行數設定ListCount(要傳遞的輸出引數)。

呼叫Oracle例子可以像下面這樣:

var ReturnValue NUMBER
EXEC MailingListCount(:ReturnValue);
SELECT ReturnValue;

這段程式碼聲明瞭一個變數來儲存儲存過程返回的任何值,然後執行儲存過程,再使用SELECT語句顯示返回的值。

19.5 小結

這一課介紹了什麼是儲存過程,為什麼使用儲存過程。