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 add_three_numbers;
/
三個參數均有默認值 0,支持靈活調用。
按參數定義順序傳值,不可跳過中間參數。
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)); -- 9
END;
/
僅傳遞部分參數,其餘使用默認值。
BEGIN
DBMS_OUTPUT.PUT_LINE(add_three_numbers(12, c => 2)); -- a=12, b=0(默認), c=2 => 14
END;
/
在 SQL 中僅支持位置表示法與混合表示法,不支持純命名表示法。
SELECT add_three_numbers(3, b => 4, c => 2) FROM DUAL; -- 9
| 場景 | 推薦語法 | 理由 |
|---|---|---|
| 參數少、順序固定 | 位置表示法 | 代碼簡潔,可讀性高 |
| 參數多、常用默認值 | 命名/混合表示法 | 自文檔化,避免傳錯順序 |
| SQL 查詢中調用 | 位置或混合 | 語法限制 |
| 動態構建調用 | 命名表示法 | 便於程式化拼接 |
add_three_numbers(a => 1, 2) → PLS-00306。SELECT add_three_numbers(a => 1) FROM DUAL → ORA-00907。