相同點:皆為編譯後儲存在資料庫的 PL/SQL 程式單元。
不同點:函數必須有 RETURN 值,可用於 SQL 語句、賦值運算式、條件判斷中;存儲過程無返回值,通常執行業務動作。
CREATE OR REPLACE FUNCTION func_test (param1 NUMBER DEFAULT 20) RETURN NUMBER IS
val NUMBER := 20;
BEGIN
IF param1 >= val THEN
RETURN param1;
ELSE
RETURN val;
END IF;
END;
RETURN NUMBER:宣告返回資料型別(必填)。DEFAULT 20:參數預設值,呼叫時可省略。RETURN param1:結束函數並回傳值。ALTER FUNCTION func_test COMPILE;| 場景 | 語法範例 | 說明 |
|---|---|---|
| SQL 語句中 | SELECT func_test FROM dual;SELECT func_test(30) FROM dual; | 無參/有預設值可省略括號;有參無預設值必須傳參。 |
| 賦值語句中 | i := func_test();i := func_test(100); | 將返回值存入變數。 |
| 運算式/條件中 | IF func_test(200) > 100 THEN ... | 直接參與邏輯判斷。 |
DROP FUNCTION func_test;
CREATE FUNCTION ... DETERMINISTIC ...TABLE() 當資料表使用。CREATE FUNCTION ... RETURN type PIPELINED ...CREATE FUNCTION ... RESULT_CACHE ...CREATE OR REPLACE FUNCTION fmt_amount (p_amt NUMBER) RETURN VARCHAR2 IS
BEGIN
IF p_amt IS NULL THEN RETURN '0.00'; END IF;
RETURN TRIM(TO_CHAR(p_amt, '999,999,999,999,999.99'));
EXCEPTION WHEN OTHERS THEN RETURN 'ERR';
END;
使用:SELECT fmt_amount(salary) FROM employees;
函數 = 必須 RETURN 的 PL/SQL 单元。掌握 CREATE FUNCTION、RETURN datatype、ALTER FUNCTION COMPILE、DROP FUNCTION 四大指令,並善用 DETERMINISTIC/RESULT_CACHE 提升高頻計算效能。