1、函数即实现某种特殊功能的sql语句,先来个简单的入题:
select upper('abcdf') from dual ;
上图所示 为upper('abcdf') 函数,其作用为将小写的字母转换为大写;
2、自定义函数:
想想如何将字符串:'abcdf' 的首字母改为大写,其余为小写呢?于是我们自己定义一个函数将其实现:
create or replace function f2(p_w varchar2) --p_w 为传入参数
return varchar2 --返回类型
as
v_f char(1); --定义变量v_f
v_a varchar2(500); --定义变量v_a
begin
--判断是否有数据
if p_w is null then
return null;
end if;
if length(p_w)=0 then
return null;
end if;
--取第一个字
v_f :=substr(p_w,1,1); --【:=】是赋值的意思(即将右边的赋给左边的)
--取剩余
v_a:=substr(p_w,2);
v_a:=lower(v_a);--小写
v_f:=upper(v_f);
--拼接
v_a:=v_f||v_a;
return v_a;
end;
效果如下:
3、来点干货:
写一个函数实现输入功能分类的编码,返回该功能分类的全称;
如:
输入:xxxfunction('101010103'),
返回:税收收入/增值税/国内增值税/股份制企业增值税
create or replace function fn_getkmqc(char_code in varchar2)
return varchar2
/*功能科目分为类款项
编码规则为:3-2-2-2-2
类:3位
款:2位
项:2位*/
as
v_n number(10);
v_a varchar2(500);
v_b varchar2(500);
v_c varchar2(500);
begin
v_n := 3;
LOOP
v_b := substr(char_code,1,v_n);
select t.chr_name into v_a from GOV_GNFL t where t.chr_code=v_b ;
if v_b = char_code then
v_c := v_c||v_a;
else
v_c := v_c||v_a||'/';
end if;
v_n := v_n + 2;
EXIT WHEN v_b = char_code;
END LOOP;
return v_c;
end;