在 Oracle 資料庫中,預存程序 是儲存在資料字典中的預先編譯程式區塊。它們可以被不同使用者與應用程式共享,實現程式碼重用與效能優化。預存程序在伺服器端執行,減少網路傳輸開銷,執行速度遠快於客戶端 SQL 敘述。
CREATE PROCEDURE 程序名
[(參數 參數模式 資料型態, ...)]
IS | AS
BEGIN
SQL_敘述
END 程序名;
| 模式 | 說明 |
|---|---|
| IN | 輸入參數,傳遞值給程序 |
| OUT | 輸出參數,程序賦值後傳回呼叫端 |
| IN OUT | 雙向參數,可傳入也可傳出 |
EXECUTE 程序名 [參數1, 參數2, ...];
CREATE PROCEDURE count_grade
(zym IN CHAR, person_num OUT NUMBER)
AS
BEGIN
SELECT COUNT(zym) INTO person_num FROM announce;
END count_grade;
CREATE OR REPLACE PROCEDURE update_info
(xm IN CHAR)
AS
xf NUMBER; -- 定義變數
BEGIN
SELECT zxf INTO xf FROM xs WHERE xm = xm;
IF xf > 60 THEN
UPDATE xs SET bz = '三好學生' WHERE xm = xm;
END IF;
IF xf < 35 THEN
UPDATE xs SET bz = '學分沒修滿' WHERE xm = xm;
END IF;
END update_info;
執行:EXEC update_info('丁吉祥');
CREATE OR REPLACE 重建,ALTER PROCEDURE 僅用於重新編譯驗證DROP PROCEDURE 程序名; 釋放記憶體資源觸發器 是與資料表緊密關聯的特殊程序,當基礎表發生 INSERT、UPDATE、DELETE 操作時自動執行,用於維護資料完整性與一致性。每張表最多可建立 12 種觸發器:
| 類型 | 時機 | 層級 |
|---|---|---|
| 1,2,3 | BEFORE / AFTER INSERT | STATEMENT / ROW |
| 4,5,6 | BEFORE / AFTER UPDATE | STATEMENT / ROW |
| 7,8,9 | BEFORE / AFTER DELETE | STATEMENT / ROW |
| 10,11,12 | INSTEAD OF | VIEW 專用 |
CREATE OR REPLACE TRIGGER 觸發器名
{BEFORE | AFTER | INSTEAD OF}
{DELETE | INSERT | UPDATE [OF 欄位...]}
ON 表名 | 檢視名
[FOR EACH ROW] [WHEN 條件]
PL/SQL 區塊
掌握預存程序與觸發器,能大幅提升 Oracle 應用開發的效能、安全性與維護性。