存储程序
储存程序 (Stored Procedure),又可稱預儲程序或者存储过程,是一種在資料庫中儲存複雜程序,以便外部程式呼叫的一種資料庫物件,它可以視為資料庫中的一種函數或子程序。
目录 |
優缺點 [编辑]
優點 [编辑]
預存程序具有下列的好處:
- 預存程序可封裝,並隱藏複雜的商業邏輯。
- 預存程序可以回傳值,並可以接受參數。
- 預存程序無法使用 SELECT 指令來執行,因為它是子程序,與檢視表,資料表或使用者定義函數不同。
- 預存程序可以用在資料檢驗,強制實行商業邏輯等。
缺點 [编辑]
- 預存程序,往往客製化於特定的資料庫上,因為支援的程式語言不同。當切換到其他廠商的資料庫系統時,需要重寫原有的預存程序。
- 預存程序的效能調校與撰寫,受限於各種資料庫系統。
支援預存程序的資料庫 [编辑]
| 資料庫系統 | 預存程序使用的程式語言 |
|---|---|
| CUBRID | Java |
| DB2 | SQL PL or Java |
| Firebird | PSQL (Fyracle also supports portions of Oracle's PL/SQL) |
| Informix | SPL |
| Microsoft SQL Server | Transact-SQL and various .NET Framework languages |
| MySQL | own stored procedures, closely adhering to SQL:2003 standard. |
| Oracle | PL/SQL or Java |
| PostgreSQL | PL/pgSQL, can also use own function languages such as pl/perl or pl/php |
| 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'
| 数据库管理系统(DBMS) () | |
|
概念 |
|
|
数据库组件 |
SQL |
| 数据库管理系统的实施 | |
|
实施类型 |
|
|
数据库成分 |
|