四、CREATE FUNCTION statement
Derby中,通过CREATE FUNCTION语句创建函数,当然,该函数实际还是通过调用Java类中的函数来实现相应的功能。
函数的创建者与该数据库建立者默认获得函数的绝对控制权,且不可被剥夺。此外,还可授于其它用户执行函数的权力。
函数名可以指定schema,但当函数内的处理过程属于某个特定的schema时,不能以SYS开头的字符串作为函数名的schema名(If a qualified procedure name is specified, the schema name cannot begin with SYS.)。
函数参数类型不能为以下类型:BLOB, CLOB, LONG VARCHAR, LONG VARCHAR FOR BIT DATA, and XML。
返回的数据类型可以为表类型(即普通的查询结果数据集,对应到Java中就是ResultSet)或者数据库数据类型。Java函数返回的数据将会被强制转换成CREATE FUNCTION语句中所描述的数据库数据类型,并对数据长度过长的按对应的数据库类型最长长度进行截短。其中,返回为表数据时,结果集中不应该有XML类型数据(XML is not allowed as the type of a column in the dataset returned by a table function.),而char与String长度比表列中的定义长度短时,Derby会在其后填补相应位空格以达到定义长度。
函数体包含以下元素:
{
| LANGUAGE { JAVA }
| DeterministicCharacteristic
| EXTERNAL NAME string
| PARAMETER STYLE ParameterStyle
| { NO SQL | CONTAINS SQL | READS SQL DATA }
| { RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT }
}
以上的各个元素排名不分先后,但其中LANGUAGE、PARAMETER STYLE、EXTERNAL NAME三个元素是必须的。
LANGUAGE指定为JAVA,则数据库管理器会将该函数当成公有静态方法调用。
EXTERNAL NAME指定将要被调用的Java方法的完整名称,即类名+方法名。
DeterministicCharacteristic指定该函数是否可确定(输入相同的参数,输出的结果始终一致,为确定性函数;反之,为不确定性函数),这一点主要用于确定该函数可否用于索引计算列和索引视图等特性。默认指定为NOT DETERMINISTIC。因为Derby不会去判断某个操作的确定/不确定性,所以在指定函数为DETERMINISTIC时需谨慎。
ParameterStyle指定参数类型.JAVA:普通数据库类型;DERBY_JDBC_RESULT_SET:表数据类型。
可以指定函数中SQL语句的执行环境:NO SQL则表示不能运行任何SQL语句;CONTAINS SQL表示可以包含不读取、不修改SQL DATA的SQL语句;READS SQL DATA为默认设定,表示可以包含不修改SQL DATA的SQL语句。
RETURNS NULL ON NULL INPUT表示任何参数为NULL时,函数不被调用,直接返回NULL;CALLED ON NULL INPUT为默认设定,即当存在参数为NULL时,函数依然被调用执行。
--------------------------------------
Example of declaring a scalar function
CREATE FUNCTION TO_DEGREES
( RADIANS DOUBLE )
RETURNS DOUBLE
PARAMETER STYLE JAVA
NO SQL LANGUAGE JAVA
EXTERNAL NAME 'java.lang.Math.toDegrees'
Example of declaring a table function
CREATE FUNCTION PROPERTY_FILE_READER
( FILENAME VARCHAR( 32672 ) )
RETURNS TABLE
(
KEY_COL VARCHAR( 10 ),
VALUE_COL VARCHAR( 1000 )
)
LANGUAGE JAVA
PARAMETER STYLE DERBY_JDBC_RESULT_SET
NO SQL
EXTERNAL NAME 'vtis.example.PropertyFileVTI.propertyFileVTI'
读书笔记 - Derby Reference Manual(二)
最新推荐文章于 2021-06-08 13:38:42 发布