在 Oracle 11g PL/SQL 開發中,函數呼叫支援多種參數傳遞方式,彈性應對不同業務場景。本文以自訂函數 ADD_THREE_NUMBERS 為例,系統梳理五種呼叫語法的寫法、適用場景與注意事項。
CREATE OR REPLACE FUNCTION add_three_numbers (
a NUMBER := 0,
b NUMBER := 0,
c NUMBER := 0
) RETURN NUMBER IS
BEGIN
RETURN a + b + c;
END;
最傳統方式,依參數定義順序傳值,簡潔但需記住順序。
BEGIN
DBMS_OUTPUT.PUT_LINE(add_three_numbers(2, 4, 5)); -- 輸出 11
END;
以 參數名 => 值 形式指定,順序可任意調換,程式碼可讀性最高,適合參數眾多或預設值複雜的函數。
BEGIN
DBMS_OUTPUT.PUT_LINE(add_three_numbers(b => 3, a => 4, c => 2)); -- 輸出 9
END;
前段用位置,後段用命名,規則:位置參數必須在命名參數之前。
BEGIN
DBMS_OUTPUT.PUT_LINE(add_three_numbers(3, b => 4, c => 2)); -- a=3, b=4, c=2 → 輸出 9
END;
利用函數定義的預設值,僅傳遞需覆寫的參數,搭配命名表示法最清晰。
BEGIN
DBMS_OUTPUT.PUT_LINE(add_three_numbers(12, c => 2)); -- a=12, b=0(預設), c=2 → 輸出 14
END;
在 SQL 查詢中同樣支援上述語法,常用於 DUAL 或表達式計算。
SELECT add_three_numbers(3, b => 4, c => 2) FROM dual; -- 回傳 9
| 場景 | 推薦語法 | 理由 |
|---|---|---|
| 參數少、順序固定 | 位置表示法 | 程式碼最精簡 |
| 參數多、有預設值、團隊協作 | 命名表示法 | 自文件化,減少傳錯順序風險 |
| 前幾個參數固定,後段彈性 | 混合表示法 | 兼顧簡潔與彈性 |
| SQL 查詢、報表運算 | 命名/混合 | 提升 SQL 可讀性 |
熟練掌握五種呼叫方式,能讓 PL/SQL 程式碼更健壯、易維護,尤其在參數演進、介面重構時優勢明顯。