数据仓库服务 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产品介绍_DWS产品优势_DWS功能_DWS使用场景_DWS是什么
- GaussDB支持的函数_GaussDB函数类型解析_高斯数据库支持的函数-华为云
- GaussDB数据库函数_GaussDB函数和操作符_高斯数据库函数-华为云
- DWS安全_数据仓库服务安全_DWS数据安全管理_DWS安全保障_DWS安全策略
- GaussDB设置默认值_GaussDB存储过程_高斯数据库设置默认值-华为云
- GaussDB(DWS)常用SQL_常用SQL命令_SQL语法
- 华为GaussDB自定义函数_GaussDB教程_华为高斯数据库自定义函数