存储过程

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