读书笔记 - Derby Reference Manual(二)
来源:互联网 发布:北上广打拼 知乎 编辑:程序博客网 时间:2024/05/22 06:36
四、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(二)
- 读书笔记 - Derby Reference Manual(一)
- 读书笔记 - Derby Reference Manual(三)
- 线程使用手册(Thread reference manual)笔记
- LLVM Language Reference Manual(参考指南)
- eCos Reference Manual
- MySQL Reference Manual中文版
- GTK+ Reference Manual
- MySQL 5.1 Reference Manual
- MySQL Reference Manual中文版
- GTK+ Reference Manual
- GTK+ Reference Manual
- Lua 5.1 Reference Manual
- LLVM Language Reference Manual
- JRebel Reference Manual
- The Matrix Reference Manual
- 《A Reference Manual》笔记
- GNU C Reference Manual
- C#网络应用编程基础练习题与答案(转载)
- 在Linux下如何快速搭建安全的FTP服务器
- 追MM和设计模式
- C++ 运算符优先级列表
- 关于Mssql中的varbinary的使用
- 读书笔记 - Derby Reference Manual(二)
- 360卫士本地提权漏洞——后门利用程序
- 事务(进程 ID )与另一个进程已被死锁在 lock 资源上,且该事务已被选作死锁牺牲品。请重新运行该事务
- AWT与Swing的实现原理差别
- struts中ActionForward的也可以这样用
- Eclipse安装CDT,Build时出现Internal Build错误解决方法
- oracle10g新特性——物化视图 Advisor(中文称为顾问
- tomcat域名绑定
- 系统服务