oracle:自定义函数

 

CREATE OR REPLACE FUNCTION GETDAY_HLastDAY (D_Stand_Date date)
 return Date as
 D_Return Date; /*返回的日期*/
 begin
   D_Return := D_Stand_Date;


   /*如果当天是工作日,下一天也是工作日*/
   if (isholiday('XSHE',D_Stand_Date)=0 AND isholiday('XSHE',getday_hday('CN',D_Stand_Date,1, 'D'))=0) then
     return D_Return;
   end if;

   while (true) loop
       D_Return := D_Return + 1;
       /*如果是节假日的最后一天*/
       if (isholiday('XSHE',D_Return)=1 AND isholiday('XSHE',getday_hday('CN',D_Return,1, 'D'))=0) then
         exit; /*退出循环*/
      end if;  -- if then 表示开始, end if;表示结束,要成对出现
      
   end loop;
   return D_Return;

  -- 异常处理,捕捉异常
  exception when others then D_Return := D_Stand_Date;
    return D_Return;
    
 end;  -- 结束的end要加上分号

 

 oracle中使用if  then  elsif  then end if

CREATE OR REPLACE FUNCTION GETFJKMBYMAP
( var_len     IN NUMBER,     -- 长度
  var_fjjdm   IN VARCHAR2,   -- 组合代码
  var_Km_Code IN VARCHAR2    -- 4.5父级科目代码
) return VARCHAR2 is
  R_FJ_KM VARCHAR2(50);  -- 3.0父级科目
  R_KM VARCHAR2(50);
begin
  begin

  select facctcode into R_KM from md_km_map a where a.fjjdm = var_fjjdm and substr(c_km_code,0,var_len) = var_Km_Code
       and trim(facctcode) is not null and rownum = 1;

  exception when no_data_found
       then R_FJ_KM := var_Km_Code;
  end;


begin
    if (var_len = 4) then
      R_FJ_KM := substr(R_KM,0,4);  -- 1级
    elsif (var_len = 7) then       -- 2级
      R_FJ_KM := substr(R_KM,0,6);
    elsif (var_len = 10) then     -- 3级
      R_FJ_KM := substr(R_KM,0,8);
    elsif (var_len = 13) then       -- 4级
      R_FJ_KM := substr(R_KM,0,10);
    elsif (var_len = 17) then       -- 4级
      R_FJ_KM := substr(R_KM,0,13);
    else
      R_FJ_KM := var_Km_Code;
    end if;
    
    exception when no_data_found
       then R_FJ_KM := var_Km_Code;
end;

  return R_FJ_KM;
  
end GETFJKMBYMAP;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值