自建函数:
作用:
1.能够满足我们实际的需求,根据不同的场景自己创建函数,自己调用
2.有返回值,我们想要得到的结果 有无返回值是函数和存储过程的区别
3.任何场景 任何地方 都可以调用函数
语法:
create or replace function fu_name (argment type)
return 返回类型 不同于存储
is
<类型.变量说明>
begin
创建函数
return 返回值
exception
其他语句
end;
例题:
输入日期,返回日期去年的最后一天
create or replace function fu_1(date_date varchar2)
return date //返回类型
is
v_1 date; //定义返回变量,注意与返回类型一致
begin
select trunc(to_date(date_date,'yyyy/mm/dd'),'yyyy')-1 into v_1 from dual;
return v_1; //返回变量值
end fu1;
练习:
输入字符串类型的日期,返回当前日期是星期几
create or replace function fu_1(char_date varchar2)
return varchar2
is
v_1 varchar2(30);
begin
select to_char(to_date(char_date,'yyyy/mm/dd'),'day') into v_1 from dual;
return v_1;
end fu_1;
select fu_1('1998/02/11') from dual;
1.传参一个部门地址,返回该部门人数
create or replace function fu2(v_loc varchar2)
return number
is
v_count number(4);
begin
select count(1) into v_count from emp a left join dept b on a.deptno=b.deptno where b.loc=v_loc;
return v_count;
end fu2;
例题 传入一个员工编号 返回薪资水平----12 低收入 34 中等收入 5高收入
create or replace function fu1(v_empno number)
return varchar2
is
v_grade varchar(30);
begin
select grade into v_grade from emp a left join salgrade b on a.sal between losal and hisal where empno=v_empno;
if v_grade between 1 and 2 then v_grade:='低收入'; return v_grade;
elsif v_grade between 3 and 4 then v_grade:='中等收入'; return v_grade;
elsif v_grade>=5 then v_grade:='高收入'; return v_grade;
end if;
end fu1;
select fu1(7654) from dual
方法2
create or replace function FN_4(v_empno EMP.EMPNO%TYPE)
return varchar2
is v_shouru varchar2(30);
begin
select case when grade in (1,2) then '低收入' when grade in (3,4) then '中等收入'
when grade =5 then '高收入' end a into v_shouru from emp a left join salgrade b on a.sal between b.losal and hisal where
empno=v_empno;
return v_shouru;
end FN_4;