預存程序(Stored Procedure)是資料庫端封裝業務邏輯的核心機制,本文以 SQL Server 語法為例(Oracle PL/SQL 概念相通),說明優點、分類、建立語法與回傳值模式。
| 類型 | 前綴 | 用途 |
| 系統預存程序 | sp_ | 系統設定、資訊查詢、管理任務(如 sp_help) |
| 擴展預存程序 | xp_ | 呼叫 OS 功能(如 xp_cmdshell 'ping 10.8.16.1') |
| 使用者自訂 | 無固定 | 業務邏輯封裝 |
標準建立語法
CREATE PROCEDURE proc_name
@param1 datatype [OUTPUT],
@param2 datatype [OUTPUT]
WITH {RECOMPILE | ENCRYPTION}
AS
sql_statements
GO
OUTPUT:標記為輸出參數。
RECOMPILE:每次執行重新編譯(統計資料變動大時)。
ENCRYPTION:加密定義文本。
三種回傳值模式
| 模式 | 語法 | 適用場景 |
| RETURN 整數 | RETURN @ret_code | 狀態碼(0=成功,非 0=錯誤代碼) |
| OUTPUT 參數 | @param OUT | 單值/標量輸出(如新增 ID、計算結果) |
| Result Set | SELECT ... 無 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;
預存程序是資料庫與應用的契約介面,善用封裝、參數化、權限最小化,打造安全高效的資料存取層。
- 上一篇文章: Oracle 連線數查詢與修改:當前連線、併發連線、最大連線參數調整
- 下一篇文章: Oracle 進階複製同步技術全解:架構、前提條件、雙向同步配置步驟
Copyright ©
程式碼之家 All Rights Reserved