存储过程

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