更新时间:2025-06-04 GMT+08:00

remainder

数据库类型与版本

  • 源库类型与版本:Oracle所有版本。
  • 目标库类型与版本:GaussDB V2.0-3.1之前版本。

转换替代方案:

CREATE OR REPLACE FUNCTION dsc_ora_ext.dsc_fn_remainder
/* This function is used to replicate the behaviour of Oracle REMAINDER */
     ( i_numerator      IN   NUMBER
	 , i_denominator    IN   NUMBER )
RETURN NUMBER 
IMMUTABLE
AS 
    v_remainder      NUMBER;
BEGIN

    IF i_numerator IS NULL OR i_denominator IS NULL
    -- If anyone of the inputs is NULL, return NULL
    THEN 
        RETURN NULL;
    END IF;

    v_remainder := MOD(i_numerator, i_denominator);

    IF ABS(v_remainder/i_denominator) > 0.5 
    -- If the remainder (mod) is more than half of demonitor, do the below
	-- i.e., use ROUND instead of FLOOR used in MOD
    THEN
       v_remainder := i_numerator - (ROUND(i_numerator*1.0 / i_denominator) * i_denominator);
    END IF;

    RETURN v_remainder;
END;