存储程序

维基百科,自由的百科全书
跳转至: 导航搜索

储存程序 (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) (查看 · 讨论 · 编辑)

概念
数据库 · 数据模型 · 数据库存储结构英语Database storage structures · 关系 (数据库) · 关系模型 · 分布式数据库 · ACID ( 原子性英语Atomicity (database systems) · 一致性 · 隔離性 · 持久性 ) · Null值
关系数据库 · 关系模型 · 数据库规范化 · 數據庫完整性 · 實體完整性 · 參照完整性英语Referential integrity · 关系数据库管理系统 
主键 · 外键 · 代理键 · 超键 · 候选键 

数据库组件
触发器 · 视图 · 数据库表 · 指标 (数据库) · 事务日志英语Transaction log · 数据库事务 · 并发控制 · 乐观锁 · 悲观锁 · 数据库索引 
存储程序 · 資料庫分割

SQL
分类: 数据查询语言 (DQL) - 資料定義語言 (DDL) - 資料操縱語言 (DML) - 資料控制語言 (DCL)
指令:SELECT · INSERT · UPDATE · MERGE · DELETE · JOIN · UNION · CREATE · DROP · Begin work · COMMIT · ROLLBACK · TRUNCATE · ALTER
安全: SQL資料隱碼攻擊 · 參數化查詢

数据库管理系统的实现

实现类型
关系数据库 · 檔案型資料庫 · Deductive · 維度化資料庫 · 階層式 · 圖形資料庫 · 对象数据库 · 物件關聯式資料庫 · Temporal · XML資料庫

数据库产品
对象型 (对比) · 关系型 (对比)

数据库组件
数据查询语言 · 查詢最佳化器 · 查詢計畫 · 嵌入式SQL · ODBC · JDBC · OLE DB