数据仓库服务 GAUSSDB(DWS)-GaussDB(DWS) PL/Java语言函数:重载函数

时间:2024-12-02 17:18:12

重载函数

PL/Java支持重载函数,因此可以创建同名函数,或者调用Java代码中的重载方法。步骤如下:

  1. 创建重载函数

    例如,在Java中可以实现两个方法名相同,输入参数类型不同的方法dummy(int) 和dummy(String)

    public class Example
    {
        public static int dummy(int value)
        {
            return value*2;
        }
        public static String dummy(String value)
        {
            return value;
        }
    }

    并在 GaussDB (DWS)中创建两个同名函数分别指定为上述两个方法:

    CREATE FUNCTION java_dummy(INTEGER)
        RETURNS INTEGER
        AS 'Example.dummy'
    LANGUAGE JAVA;
    
    CREATE FUNCTION java_dummy(VARCHAR)
        RETURNS VARCHAR
        AS 'Example.dummy'
    LANGUAGE JAVA;

  2. 调用重载函数

    在调用重载函数时,GaussDB(DWS)会根据输入的参数类型去调用匹配该类型的Java方法。因此上述两个函数的调用结果如下所示:

    SELECT java_dummy(5);
     java_dummy
    -----------------
                10
    (1 row)
    
    SELECT java_dummy('5');
     java_dummy
    ---------------
    5
    (1 row)

    需要注意的是,由于GaussDB(DWS)对数据类型存在隐式转换的情况,因此建议在调用重载函数时,指定输入参数的类型,例如:

    SELECT java_dummy(5::varchar);
     java_dummy
    ----------------
    5
    (1 row)

    此时会优先匹配所指定的参数类型,如果不存在指定参数类型的Java方法,则会对参数进行隐式转换匹配转换后的参数类型对应的Java方法。

    SELECT java_dummy(5::INTEGER);
     java_dummy
    -----------------
    10
    (1 row)
    
    DROP FUNCTION java_dummy(INTEGER);
    
    SELECT java_dummy(5::INTEGER);
     java_dummy
    ----------------
    5
    (1 row)

    隐式转换的数据类型包括:

    • 可以默认转换为INTEGER类型的包括:SMALLINT
    • 可以默认转换为BIGINT类型的包括:SMALLINT、INTEGER
    • 可以默认转换为BOOL类型的包括:TINYINT、SMALLINT、INTEGER、BIGINT
    • 可以默认转换为TEXT类型的包括:CHAR、NAME、BIGINT、INTEGER、SMALLINT、 TINYINT、RAW、FLOAT4、FLOAT8、BPCHAR、VARCHAR、NVARCHAR2、DATE、TIMESTAMP、TIMESTAMPTZ、NUMERIC、SMALLDATETIME
    • 可以默认转换为VARCHAR类型的包括:TEXT、CHAR、BIGINT、INTEGER、SMALLINT、TINYINT、RAW、FLOAT4、FLOAT8、BPCHAR、DATE、NVARCHAR2、TIMESTAMP、NUMERIC、SMALLDATETIME

  3. 删除重载函数

    对于重载函数,删除时需要指定函数的参数类型,否则无法删除。

    DROP FUNCTION java_dummy(INTEGER);

support.huaweicloud.com/devg-830-dws/dws_04_0509.html