目錄
函數
函數是命名的PL/SQL塊,能夠返回值,可以存儲在數據庫中,能夠作爲表達式的一部分被調用。
函數跟過程的區別
函數能夠返回值,過程是靠out參數;過程不能作爲獨立語句,而函數是作爲一個表達式使用。
函數創建
語法:
CREATE [OR REPLACE] FUNCTION function name
[(parameter1 [mode1] datatypel,
parameter2 [mode2] datatype2,
...)]
RETURN datatype
IS|AS
PL/ SQL Block;
注意:函數參數必須取輸入,帶輸出參數的調用的時候不能用。
例子:
函數的調用
DECLARE V_ ann_sal NUMBER(9,2) ;
BEGIN
get_annual_income(V_ann_sal);
dbms_output.put_line(v_annsal) ;
END ;
函數的定義
create or replace function annual income (P_ empno ermp . empno8type)
return number
is
v_ ann_sal number(9,2);
begin
SELECT sal*12+nvl (comm, 0)*10 +20000
INTO V_ann_sal
FROM emp
WHERE empno=p_ empno;
return(V_ann_sal) ;
EXCEPTION
WHEN no data found THEN
return(0);
end annual income ;
函數的參數也可以是字段名。
調用函數的限制
爲了從SQL表達式中調用函數,用戶定義函數必須:
- 只接受IN參數
- 只接受有效的SQL數據類型,而不接受PL/ SQL特殊的類型作爲參數
- 返回數據類型爲有效的SQL數據類型,而非PL/ SQL特殊的類型
- 在一個表上的UPDATE或DELETE語句中調用的函數不能查詢及更新同一個表
- 從SQL語句中調用的函數不能包含結束事務的語句(提交、回滾等)
函數最好僅執行一些計算過程等。
過程和函數
函數能夠返回值,過程是靠out參數;過程不能作爲獨立語句,而函數是作爲一個表達式使用。
過程 | 函數 |
作爲一個獨立的PL/SQL語句執行 | 作爲表達式的一部分調用 |
在規格說明中不包含RETURN子句 | 必須在規格說明中包含RETURN子句 |
可以返回很多值 | 必須返回單個值 |
不用包含RETURN 語句 | 必須包含至少一條RETURN語句 |
函數傾向於運算、合法治判斷。
刪除函數
語法:
DROP FUNCTION function_name
注意:屬於DDL語句,無法rollback