读书笔记 - Derby Reference Manual(二)

四、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'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值