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

时间:2025-02-12 15:04:48

重载函数

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-dws/dws_04_0509.html