ORACLE 自定义函数
语法结构:
CREATE [OR REPLACE] FUNCTION 函数名
(
参数1 model 类型1 [DEFAULT xx],
参数2 model 类型2 [DEFAULT xx],
参数3 model 类型3 [DEFAULT xx]
)
RETURN 返回类型
[DETERMINISTIC]
IS/AS
--声明部分
BEGIN
--PL/SQL程序块
END [函数名]
model 参数模式有3种
- IN: 只读模式, 在函数中, 参数的值只能被引用, 不能被改变;
- OUT: 为只写模式, 只能被赋值, 不能被引用;
- IN OUT: 可读可写;
DETERMINISTIC: 确定性函数 函数的入参不变,则其返回结果也是一定的 , Oracle11g开始会对其参数及其返回结果进行缓存处理以提升性能。
注意: 定义的出入参不能 与 函数内部使用表字段相同,会造成冲突!
计算例子:
CREATE OR REPLACE FUNCTION full_calculator(ctype IN VARCHAR2, num1 IN NUMBER, num2 IN NUMBER) RETURN NUMBER DETERMINISTIC IS
res_num NUMBER :=0;
BEGIN
if ctype = '+' then
select (num1+num2) into res_num from dual;
elsif ctype = '-' then
select (num1-num2) into res_num from dual;
elsif ctype = '*' then
select (num1*num2) into res_num from dual;
elsif ctype = '/' and num2 <> 0 then
select (num1/num2) into res_num from dual;
else
RETURN NULL;
end if;
RETURN res_num;
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END full_calculator;
-- 测试
select full_calculator('+',4,2) from dual;