DB2 到 Oracle 函数迁移

有如下需求,将DB2的自定义函数迁移到Oracle,现做一下记录。
DB2函数:

--DB2
CREATE FUNCTION "QUAL"."CHECKINDEXSTATUS"
 ("CRNT_VAL" DECIMAL(20, 2),
  "PERCENT_VAL" DECIMAL(20, 2),
  "WRCAP" DECIMAL(20, 2),
  "WRFLOOR" DECIMAL(20, 2),
  "WPCAP" DECIMAL(20, 2),
  "WPFLOOR" DECIMAL(20, 2),
  "ERCAP" DECIMAL(20, 2),
  "ERFLOOR" DECIMAL(20, 2),
  "EPCAP" DECIMAL(20, 2),
  "EPFLOOR" DECIMAL(20, 2)
 ) 
  RETURNS INTEGER
  SPECIFIC "QUAL"."SQL140402151923000"
  LANGUAGE SQL
  NOT DETERMINISTIC
  READS SQL DATA
  STATIC DISPATCH
  CALLED ON NULL INPUT
  EXTERNAL ACTION
  INHERIT SPECIAL REGISTERS
  BEGIN AtOMIC
    if CRNT_VAL=-444444444
      and PERCENT_VAL=-444444444 then
      return -3;
    elseIF CRNT_VAL=-444444444 THEN
      IF PERCENT_VAL <=EPFLOOR
        or PERCENT_VAL>=EPCAP THEN
        RETURN -2;
      ELSEIF PERCENT_VAL>= WPCAP
        or PERCENT_VAL<= WPFLOOR THEN
        RETURN -1;
      ELSE
        RETURN 0;
      END IF;
    ELSEIF PERCENT_VAL=-444444444 THEN
      IF CRNT_VAL>= ERCAP
        or CRNT_VAL<= ERFLOOR THEN
        RETURN -2;
      ELSEIF CRNT_VAL>= WRCAP
        or CRNT_VAL<= WRFLOOR THEN
        RETURN -1;
      ELSE
        RETURN 0;
      END IF;
    ELSE
      IF (PERCENT_VAL>= EPCAP
        or PERCENT_VAL<= EPFLOOR )
        OR ( CRNT_VAL>= ERCAP
        or CRNT_VAL<= ERFLOOR ) THEN
        RETURN -2;
      ELSEIF ( PERCENT_VAL>= WPCAP
        or PERCENT_VAL<= WPFLOOR )
        OR ( CRNT_VAL>= WRCAP
        or CRNT_VAL<= WRFLOOR ) THEN
        RETURN -1;
      ELSE
        RETURN 0;
      END IF;
    END IF;
  END;

迁移到Oracle,如下:

--Oracle
create or replace function CHECKINDEXSTATUS
(CRNT_VAL number,
 PERCENT_VAL number,
 WRCAP number,
 WRFLOOR number,
 WPCAP number,
 WPFLOOR number,
 ERCAP number,
 ERFLOOR number,
 EPCAP number,
 EPFLOOR number
)
return number
is
begin
    if (CRNT_VAL=-444444444
      and PERCENT_VAL=-444444444) then
      return -3;
    elsif (CRNT_VAL=-444444444) THEN
      IF (PERCENT_VAL <=EPFLOOR
        or PERCENT_VAL>=EPCAP) THEN
        RETURN -2;
      elsif (PERCENT_VAL>= WPCAP
        or PERCENT_VAL<= WPFLOOR) THEN
        RETURN -1;
      ELSE
        RETURN 0;
      END IF;
    elsif (PERCENT_VAL=-444444444) THEN
      IF (CRNT_VAL>= ERCAP
        or CRNT_VAL<= ERFLOOR) THEN
        RETURN -2;
      elsif (CRNT_VAL>= WRCAP
        or CRNT_VAL<= WRFLOOR) THEN
        RETURN -1;
      ELSE
        RETURN 0;
      END IF;
    ELSE
      IF ((PERCENT_VAL>= EPCAP
        or PERCENT_VAL<= EPFLOOR )
        OR ( CRNT_VAL>= ERCAP
        or CRNT_VAL<= ERFLOOR )) THEN
        RETURN -2;
      elsif (( PERCENT_VAL>= WPCAP
        or PERCENT_VAL<= WPFLOOR )
        OR ( CRNT_VAL>= WRCAP
        or CRNT_VAL<= WRFLOOR )) THEN
        RETURN -1;
      ELSE
        RETURN 0;
      END IF;
    END IF;
end;

小结:

  • 注意数据类型不同
  • 注意if函数的括号,elsif(ELSEIF)的写法的不同。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值