数据仓库服务 GAUSSDB(DWS)-GaussDB(DWS) PL/Java语言函数:重载函数
重载函数
PL/Java支持重载函数,因此可以创建同名函数,或者调用Java代码中的重载方法。步骤如下:
- 创建重载函数
例如,在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;
- 调用重载函数
在调用重载函数时,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
- 删除重载函数
对于重载函数,删除时需要指定函数的参数类型,否则无法删除。
DROP FUNCTION java_dummy(INTEGER);
- 数据仓库服务GaussDB(DWS)_SQL on Anywhere
- GaussDB函数_GaussDB数据库函数_高斯数据库函数_华为云
- GaussDB数据库函数_GaussDB介绍_高斯数据库函数
- DWS资源管理_GaussDB(DWS)资源管理作用_DWS资源管控
- DWS产品介绍_DWS产品优势_DWS功能_DWS使用场景_DWS是什么
- DWS安全_数据仓库服务安全_DWS数据安全管理_DWS安全保障_DWS安全策略
- 调用GaussDB(DWS) API接口_数据仓库服务调用API_如何调用API_在DWS中调用API
- GaussDB支持的函数_GaussDB函数类型解析_高斯数据库支持的函数-华为云
- GaussDB数据库函数_GaussDB函数和操作符_高斯数据库函数-华为云
- GaussDB(DWS)常用SQL_常用SQL命令_SQL语法