預存程序

預存程序,又稱儲存程序(英語:Stored Procedure),是在資料庫儲存複雜程序,以便外部程式呼叫的資料庫物件,可以視為資料庫的一種函數子程序

優缺點

優點

預存程序具有下列的好處:

  • 預存程序可封裝,並隱藏複雜的商業邏輯
  • 預存程序可以回傳值,並可以接受參數。
  • 預存程序無法使用 SELECT 指令執行,因為它是子程序,與檢視表資料表使用者定義函數不同。
  • 預存程序可以用在資料檢驗,強制實行商業邏輯等。

缺點

  • 預存程序,往往客製化於特定的資料庫上,因為支援的程式語言不同。當切換到其他廠商的資料庫系統時,需要重寫原有的預存程序。
  • 預存程序的效能調校與撰寫,受限於各種資料庫系統。

支援預存程序的資料庫

資料庫系統 預存程序使用的程式語言
CUBRID Java
DB2 SQL PLJava
Firebird PSQL (Fyracle 亦支援部分 Oracle 的 PL/SQL)
Informix SPL
Microsoft SQL Server Transact-SQL 及多種 .NET Framework 語言
MySQL 自己標準的預存程序,很接近 SQL:2003 標準
Oracle PL/SQLJava
PostgreSQL PL/pgSQL,亦可使用自己的函式語這,例如 pl/perl 或 pl/php
SAP SQLScriptR
Sybase ASE Transact-SQL

範例

預存程序是資料庫物件之一,必須使用資料定義語言來建立,例如:

以下範例,以Microsoft的SQL Server所以採用的T-SQL語法表示。
CREATE PROCEDURE usp_AddProduct
(
   @Barcode varchar(13),
   @Caption nvarchar(50)
)
AS
BEGIN

   IF LEN(@Barcode) < 13 
      RAISERROR('Barcode length is too short.')

   INSERT INTO MyProducts (Barcode, Caption) VALUES (@Barcode, @Caption)

END

外部程序需要使用 EXECUTE 或 CALL 來呼叫預存程序。

EXEC usp_AddProduct '2293891100011', 'MyProductCaption'