第19課 使用儲存過程
阿新 • • 發佈:2020-07-20
第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 小結
這一課介紹了什麼是儲存過程,為什麼使用儲存過程。