Java 示例:AddAnyInts
以下示例显示了将两个或更多整数相加的 Java ScalarFunction
的实施。
有关完整的源代码,请参阅示例(位于 /opt/vertica/sdk/examples/JavaUDx/ScalarFunctions
中)中的 AddAnyIntsInfo.java
。
加载和使用示例
加载库并创建函数,如下所示:
=> CREATE LIBRARY JavaScalarFunctions AS '/home/dbadmin/JavaScalarLib.jar' LANGUAGE 'JAVA';
CREATE LIBRARY
=> CREATE FUNCTION addAnyInts AS LANGUAGE 'Java' NAME 'com.vertica.JavaLibs.AddAnyIntsInfo'
LIBRARY JavaScalarFunctions;
CREATE FUNCTION
使用两个或多个整数实参调用函数:
=> SELECT addAnyInts(1,2);
addAnyInts
------------
3
(1 row)
=> SELECT addAnyInts(1,2,3,40,50,60,70,80,900);
addAnyInts
------------
1206
(1 row)
如果使用太少的实参或使用非整数实参调用函数,则产生由 processBlock()
方法生成的错误。UDx 负责确保用户向函数提供正确的参数个数和类型,如果无法处理参数,它应退出并显示错误。
函数实施
此示例中的大部分工作由 processBlock()
方法执行。该函数将对通过 BlockReader
对象传入的实参执行两次检查:
-
是否存在至少两个参数。
-
是否所有实参的数据类型均为整数。
多态 UDx 负责确定传入的所有输入是否有效。
processBlock()
方法验证其参数之后,它会在所有参数之中循环并将其相加。
工厂实施
工厂在 getPrototype()
函数中声明实参的数量和类型。