-- oracle中函数分两类,1:系统函数;2:自定义函数;
-- oracle中函数与存储过程区别:1:函数必须返回一个值
-- 1无参函数
-- 创建函数
create or replace function get_hello_msg
return varchar2 as
begin
return 'hello world';
end get_hello_msg;
-- 提示 函数的返回值可以是字符串、数值型、数组或者对象类型,但不能返回记录集合
-- 在数据字典中查看函数信息,函数名在数据字典中都是以大写
select object_name,object_type,status
from user_objects
where object_name='GET_HELLO_MSG';
-- 查看函数定义,即创建函数的sql语句
select name ,type,line,text from user_source where name='GET_HELLO_MSG';
-- 说明字段line :代码的行号,每行源码都会存储为一条记录,且是按原有模式存储,即保留空格等格式
--查看函数返回值
-- 方法1:dual表,函数一旦被创建就可以像其他函数一样使用;例如。select sysdate from dual;
select GET_HELLO_MSG msg from dual;
-- 方法2 :写测试脚本
declare
msg varchar2(20);
begin
msg :=get_hello_msg();
dbms_output.put_line(msg);
end;
-- 2带参函数
-- 计算所得税
create or replace
function get_tax(p_salary number)
return number as
begin
declare tax_salary number;
begin
tax_salary :=p_salary - 2000;
if tax_salary <=0 then
return 0;
end if;
if tax_salary<=500 then
return tax_salary*5/100;
end if;
if tax_salary<=2000 then
return tax_salary*10/100-25;
end if;
if tax_salary<=60000 then
return tax_salary*30/100-3375;
end if;
end;
end get_tax;
-- 测试
select get_tax(4000) tax from dual;