首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

資料庫預存程序入門:優點、分類、語法與三種回傳值實例

     編輯:Oracle 資料庫基礎

預存程序(Stored Procedure)是資料庫端封裝業務邏輯的核心機制,本文以 SQL Server 語法為例(Oracle PL/SQL 概念相通),說明優點、分類、建立語法與回傳值模式。

四大優點

  1. 編譯一次、執行多次:減少硬解析,提升效能。
  2. 封裝複雜交易:多表 DML 結合 BEGIN TRAN / COMMIT / ROLLBACK 確保原子性。
  3. 重複使用:減少應用端重複 SQL,降低維護成本。
  4. 權限控管:GRANT EXEC ON proc TO role,應用端僅需執行權限,無需底表權限。

三類預存程序

標準建立語法

CREATE PROCEDURE proc_name
  @param1 datatype [OUTPUT],
  @param2 datatype [OUTPUT]
WITH {RECOMPILE | ENCRYPTION}
AS
  sql_statements
GO
  • OUTPUT:標記為輸出參數。
  • RECOMPILE:每次執行重新編譯(統計資料變動大時)。
  • ENCRYPTION:加密定義文本。

三種回傳值模式

類型前綴用途
系統預存程序sp_系統設定、資訊查詢、管理任務(如 sp_help)
擴展預存程序xp_呼叫 OS 功能(如 xp_cmdshell 'ping 10.8.16.1')
使用者自訂無固定業務邏輯封裝
模式語法適用場景
RETURN 整數RETURN @ret_code狀態碼(0=成功,非 0=錯誤代碼)
OUTPUT 參數@param OUT單值/標量輸出(如新增 ID、計算結果)
Result SetSELECT ... 無 INTO多行多欄資料集(報表、清單)

實例:新增書籍並回傳總金額

CREATE PROC insert_book
  @id CHAR(10), @title VARCHAR(20), @price MONEY, @total MONEY OUTPUT
WITH ENCRYPTION
AS
  INSERT INTO book (id, title, price) VALUES (@id, @title, @price);
  SELECT @total = SUM(price) FROM book;
GO

-- 呼叫
DECLARE @sum MONEY;
EXEC insert_book '003', 'Delphi Guide', 100, @sum OUTPUT;
PRINT 'Total: ' + CAST(@sum AS VARCHAR);

Oracle PL/SQL 對應

  • CREATE OR REPLACE PROCEDURE ... IS BEGIN ... END;
  • OUT / IN OUT 參數模式。
  • SYS_REFCURSOR 回傳結果集。
  • 權限:GRANT EXECUTE ON proc TO role;
預存程序是資料庫與應用的契約介面,善用封裝、參數化、權限最小化,打造安全高效的資料存取層。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved