美文网首页
2019-01-04 oracle function函数

2019-01-04 oracle function函数

作者: FOFP | 来源:发表于2019-01-04 04:20 被阅读0次

    1、函数即实现某种特殊功能的sql语句,先来个简单的入题:
    select upper('abcdf') from dual ;

    QQ截图20190104035406.png

    上图所示 为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;
    

    效果如下:

    f3.png

    3、来点干货:

    image.png

    写一个函数实现输入功能分类的编码,返回该功能分类的全称;
    如:
    输入: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;
    
    image.png

    相关文章

      网友评论

          本文标题:2019-01-04 oracle function函数

          本文链接:https://www.haomeiwen.com/subject/jgbcrqtx.html