存储程序
存储过程,又稱儲存程序(英語:Stored Procedure),是在資料庫儲存複雜程序,以便外部程式呼叫的資料庫物件,可以視為資料庫的一種函數或子程序。
優缺點
優點
預存程序具有下列的好處:
- 預存程序可封裝,並隱藏複雜的商業邏輯。
- 預存程序可以回傳值,並可以接受參數。
- 預存程序無法使用 SELECT 指令執行,因為它是子程序,與檢視表、資料表或使用者定義函數不同。
- 預存程序可以用在資料檢驗,強制實行商業邏輯等。
缺點
- 預存程序,往往客製化於特定的資料庫上,因為支援的程式語言不同。當切換到其他廠商的資料庫系統時,需要重寫原有的預存程序。
- 預存程序的效能調校與撰寫,受限於各種資料庫系統。
支援預存程序的資料庫
資料庫系統 | 預存程序使用的程式語言 |
---|---|
CUBRID | Java |
DB2 | SQL PL 或 Java |
Firebird | PSQL (Fyracle 亦支援部分 Oracle 的 PL/SQL) |
Informix | SPL |
Microsoft SQL Server | Transact-SQL 及多種 .NET Framework 語言 |
MySQL | 自己標準的預存程序,很接近 SQL:2003 標準 |
Oracle | PL/SQL 或 Java |
PostgreSQL | PL/pgSQL,亦可使用自己的函式語這,例如 pl/perl 或 pl/php |
SAP | SQLScript 或 R |
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'