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