过滤器
一个BLOB FILTER过滤器一个数据库对象,它实际上是一种特殊的外部函数类型,使用过滤器的唯一目的是BLOB对象以一种格式且将其转换为 BLOB 对象的另一种格式。BLOB 的对象格式被规定使用用户定义的 BLOB 子类型。
转换BLOB类型的外部函数存放在动态库中并在必要时加载。
关于BLOB更详细的信息,参阅Binary Data Types
作用: 声明一个 BLOB 过滤器到数据库
用于: DSQL, ESQL
语法:
DECLARE FILTER filtername
INPUT_TYPE <sub_type> OUTPUT_TYPE <sub_type>
ENTRY_POINT 'function_name' MODULE_NAME 'library_name';
<sub_type> ::= number | <mnemonic>
<mnemonic> ::= binary | text | blr | acl | ranges
| summary | format | transaction_description
| external_file_description | user_defined
表 5.30. DECLARE FILTER 语句参数
参数 | 描述 |
filtername | 在数据库中的过滤器名称。它可能包括达 31 个字符。它不需要从通过 ENTRY_POINT 过滤器库中导出的名称相同的名称。 |
sub_type | BLOB 子类型 |
number | BLOB SUB_TYPE 编号 (必须为负) |
mnemonic | BLOB SUB_TYPE 助记符名称 |
function_name | 函数的导出名称(入口点) |
library_name | 筛选器所在的模块的名称 |
user_defined | 用户定义的BLOB子类型助记符名称 |
DECLARE FILTER 语句使 BLOB过滤器可用于数据库。BLOB 过滤器的名称中必须是唯一的 BLOB 过滤器的名称。
指定子类型
子类型可以用数字或助记符名称来的指定.自定义子类型必须(从-1 到-32768) 用负数表示。试图声明多个 BLOB
输入和输出类型相同的组合的过滤器将失败并产生错误。
INPUT_TYPE:子句定义要转换的对象的 BLOB 子类型.
OUTPUT_TYPE: 子句定义要创建的对象的 BLOB 子类型.
备注
助记符名称可以定义为自定义的 BLOB 类型,在系统表中手动插入 RDB$TYPES 系统表 ︰
INSERT INTO RDB$TYPES (RDB$FIELD_NAME, RDB$TYPE, RDB$TYPE_NAME)
VALUES ('RDB$FIELD_SUB_TYPE', -33, 'MIDI');
事务确认后,当您创建新的过滤器是助记符名称可以用在声明中。
列RDB$FIELD_NAME的值必须总是为'RDB$FIELD_SUB_TYPE'。如果助记符以大写形式的名称,他们可以被使用不区分大小写且不需要加引号标记在声明过滤器时。
警告:人Firebird 3 起,系统表将不再由用户可写。
参数
ENTRY_POINT:子句定义所在模块入口点的名称(导入的函数的名称).
MODULE_NAME: 子句定义导出的功能的名称模块所在,通常模块默认必须位于服务端的根目录下的UDF子目录下。在 firebird.conf 中的UDFAccess 参数允许编辑过滤器库文件的访问限制。
* * * * * * * * * * * * * * * * * * * * *
任可连接到数据库的用户都可以声明一个BLOB过滤器.
例子:
1. 创建一个过滤器使用子类编号.
DECLARE FILTER DESC_FILTER
INPUT_TYPE 1
OUTPUT_TYPE -4
ENTRY_POINT 'desc_filter'
MODULE_NAME 'FILTERLIB';
2. 创建一个过滤器使用助记符名称.
DECLARE FILTER FUNNEL
INPUT_TYPE blr OUTPUT_TYPE text
ENTRY_POINT 'blr2asc' MODULE_NAME 'myfilterlib';
参阅: DROP FILTER