存储过程
存储过程,又称储存程序(英语: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'