下表汇总了 Subscriber-level 参数及其属性:
Table 4-35 Subscriber-Level 参数和属性
1 此默认值是在运行时从描述符文件动态派生的。
订购参数分为两个子类别:
Disable Subscriber? 参数指定是否禁用《订购者》通道。
如果此参数设置为布尔值 True,则禁用《订购者》通道。 如果此参数设置为布尔值 False,则《订购者》通道处于活动状态。
Disable Statement-Level Locking? 参数指定在执行每一条 SQL 语句以前,是否在此通道上显式锁定数据库资源。 仅当 Enable Statement-Level Locking? 设置为布尔值 True 时,此参数才处于活动状态。
如果此参数设置为布尔值 True,则显式锁定数据库资源。 如果此参数设置为布尔值 False,则不显式锁定数据库资源。
Check Update Counts? 参数指定针对某个表执行 INSERT、UPDATE 和 DELETE 语句时,《订购者》通道是否对表的实际更新情况进行检查。
如果设置为布尔值 True,则检查更新计数。 如果未更新任何项目,则引发异常。 如果设置为布尔值 False,则忽略更新计数。
如果在 before-trigger 逻辑中重新定义了语句,则将此参数设置为布尔值 False
如果使用 Microsoft SQL Server,则使用默认值,因为不会将触发器逻辑(可能回滚到某一事务)的错误传回到《订购者》通道。
Add Default Values on Insert? 参数指定在某视图上执行 INSERT 语句时,《订购者》通道是否提供默认值。
此参数的主要用途是支持与 Microsoft SQL Server 2000 进行互操作。该数据库要求视图列约束的 NOT NULL 在 INSERT 语句中有一个非 NULL 值。
如果此参数设置为布尔值 True,则为针对视图上执行的 INSERT 语句提供默认值,而显式值尚不可用。 如果此参数设置为布尔值 False,则不提供默认值。
Table 4-39 Add Default Values on Insert?:属性
|
属性 |
值 |
|---|---|
|
Tag Name |
add-default-values-on-view-insert |
|
Required? |
no |
|
Default Value |
(dynamic1) |
|
Legal Values |
1, yes, true (yes) 0, no, false (no) |
|
Schema-Dependent |
True |
1 此默认值是在运行时从描述符文件动态派生的。
处理映射到 INSERT 语句的 <add> 事件时,《订购者》通道将使用主键值创建 Identity Manager 关联。 这些参数指定《订购者》通道如何以及何时获取构造关联值所必需的主键值。 获取主键值的方式即是主键生成/检索方法。 检索计时指明何时检索主键值。
下表确定支持的方法和计时:
Table 4-40 支持的方法和计时
|
方法 |
计时: before (row insertion) |
计时: after (row insertion) |
|---|---|---|
|
无(订购事件) |
X |
01 |
|
Driver(生成的订购者) |
X |
X |
|
Auto(自动生成的/身份列) |
02 |
X |
|
(stored procedure/function) |
X |
X |
1 《订购者》通道自动将此计时覆盖为 before。 2 《订购者》通道自动将此计时覆盖为 after。
Generation/Retrieval Method (Table-Global) 参数指定如何为所有父表和视图生成或检索主键值。 Method and Timing 参数基于每个表/视图覆盖此参数。请参见Method and Timing (Table-Local)。
如果此参数设置为 none,则假定主键值已在订购事件中存在。 如果此参数设置为 driver,则通过下列方法之一生成主键值:
对于字符串列类型,《订购者》通道通过使用 System.CurrentTimeMillis() 的返回值来生成值。 不支持其它数据类型。
如果此参数设置为 auto,则通过 java.sql.Statement.getGeneratedKeys():java.sql.ResultSet 方法检索主键值。 MySQL Connector/J JDBC 驱动程序是当前实现此方法的唯一支持的第三方 JDBC 驱动程序。请参见MySQL Connector/J JDBC 驱动程序。
Retrieval Timing (Table-Global) 参数指定《订购者》通道何时检索所有父表和视图的主键值。 Method and Timing (Table-Local) 参数会覆盖此参数。请参见Method and Timing (Table-Local)。
如果此参数设置为 before,则在插入之前检索主键值。 如果此参数设置为 after,则在插入之后检索主键值。
Method and Timing (Table-Local) 参数基于父表/视图指定主键生成/检索方法和检索计时。 它本质上是将生成/检索方法和检索计时映射到表或视图名称。 此参数的语法使用多个自变量(例如 method-name(argument1、argument2))来镜像过程编程语言方法调用。
如果使用 Tabel/View Names 参数,则可能需要对此参数值中参照的任何表、视图、储存过程或函数显式进行纲要限定。 如果使用 Schema Name 参数,则使用该纲要名称对此参数值中参照的表、视图、储存过程或函数隐式进行纲要限定。 如果此参数值中参照的表、视图、储存过程或函数不在隐式纲要中,则必须对它们进行纲要限定。
此参数值的 BNF(巴科斯-诺尔范式)表示法如下:
<key-gen> ::= <table-or-view-name> "(" <generation-retrieval-method>, <retrieval-timing> ")" {[<delimiter>] <key-gen>}
<generation-retrieval-method> ::= none | driver | auto | """ <procedure-signature> """ | """ <function-signature> """
<table-or-view-name> ::= <legal-undelimited-database-table-or-view- identifier>
<delimiter> ::= ";" | "," | <white-space>
<procedure-signature> ::= <schema-qualifier> "." <stored-routine- name>"("<argument-list>")"
<function-signature> ::= "?=" <procedure-signature>
<schema-qualifier> ::= <legal-undelimited-database-username-identifier>
<stored-routine-name> ::= <legal-undelimited-database-stored-routine -identifier>
<argument-list> ::= <column-name>{"," <column-name>}
<column-name> ::= <column-from-table-or-view-name-previously-specified>
生成或检索方法指定如何生成(如果必要)和检索主键值。 可能的方法有《无》、《驱动程序》、《自动》和《储存过程/函数》:
无 默认情况下,《订购者》通道假定 Identity Vault 是主键值的权威来源,并且必备值已经在给定的 <add> 事件中存在。 如果是这样,则无需生成主值,因为这些值已经存在。 只需要从当前的 <add> 事件中检索这些值。 将 eDirectory 特性(例如 GUID)显式纲要映射到父表或视图的主键列时,最好使用此方法。
假定存在一个名称为 usr 的表和一个名称为 view_usr 的视图,并且 Identity Vault 是主键值的权威来源,则此参数的值将类似于:
usr(none); view_usr(none)
如果使用此方法,建议将 GUID 而不是 CN 映射到父表或视图的主键列。
驱动程序 此方法假定数据库是指定的父表或视图主键值的权威来源。
在原型设计阶段或部署的初始阶段,经常需要在编写储存过程或函数之前让《订购者》通道生成主键值。 还可以针对不支持储存过程或函数的数据库使用此方法。 但在生产环境中使用此方法时,由 <add> 事件生成的所有 SQL 语句都应包含在可序列化事务中。有关其它信息,请参考Transaction Isolation Level。
除了使所有事务可序列化以外,还可以使用嵌入式 SQL 特性来设置各个事务隔离级别。有关其它信息,请参考事务隔离级别。
对于任何数字列类型,《订购者》通道均使用以下语句来生成主键值:
对于字符串列类型,《订购者》通道使用 System.CurrentTimeMillis() 的返回值生成值。 不支持其它数据类型。
假定存在一个名称为 usr 的表和一个名称为 view_usr 的视图,并且数据库是主键值的权威来源,则此参数的值将类似于:
usr(driver); view_usr(driver)
如果使用此方法,建议从纲要映射策略和通道过滤器中省略主键列。
自动 此方法假定数据库是指定的父表或视图主键值的权威来源。
有些数据库支持可自动生成插入行主键值的身份列。 此方法通过 JDBC 3 接口方法 java.sql.Statement.getGeneratedKeys():java.sql.ResultSet 检索自动生成的主键值。 MySQL Connector/J JDBC 驱动程序是当前实现此方法的唯一支持的第三方 JDBC 驱动程序。请参见MySQL Connector/J JDBC 驱动程序。
假定存在一个名称为 usr 的表和一个名称为 view_usr 的视图,并且数据库是主键值的权威来源,则此参数的值将类似于:
usr(auto); view_usr(auto)
如果使用此方法,建议从纲要映射策略和通道过滤器中省略主键列。
储存过程/函数: 此方法假定数据库是指定父表或视图主键值的权威来源。
假定
此参数的值将类似于:
usr("?=func_last_usr_idu()"); view_usr("sp_last_view_usr_pk_idu(pk_idu)")
在前面的示例中,参数被传递给储存过程。 也可以将参数传递给函数,但通常没有这个必要。 与函数不同,储存过程通常是通过参数返回值。 对于储存过程,必须将主键列作为 IN OUT 参数来传递。 必须将非键列作为 IN 参数来传递。
对于储存过程和函数,参数顺序、数字和数据类型必须与过程或函数所期望的参数的顺序、数字和数据类型相对应。
如果使用此方法,建议从纲要映射策略和通道过滤器中省略主键列。
Retrieval Timing 参数指定何时检索主键值。
<add> 事件始终会导致针对父表或视图至少执行一个 INSERT 语句。 此参数的此部分指定要在何时相对于初始 INSERT 语句检索主键值。
Before 这是默认设置。 如果指定了此设置,则在初始 INSERT 语句之前检索主键值。
IMPORTANT:除 auto 以外的所有生成/检索方法都支持此检索计时。 none 方法必需检索计时。
After 如果指定了此设置,则在初始 INSERT 语句之后检索主键值。
IMPORTANT:除 none 以外的所有生成/检索方法都支持此检索计时。 auto 方法必需检索计时。
以下示例通过添加检索计时信息对前几个示例进行了补充:
usr(none,before); view_usr(none,before)
usr(driver,before); view_usr(driver,after)
usr(auto,after); view_usr(auto,after)
usr("?=func_last_usr_idu()",before); view_usr("sp_last_view_usr_pk_idu(pk_idu)",after)
下表列出了此参数的属性:
Table 4-43 Retrieval Timing:属性
|
属性 |
值 |
|---|---|
|
Tag Name |
key-gen |
|
Required? |
no |
|
Case-Sensitive? |
请参见未定界标识符的大小写问题。 |
|
Sample Value |
usr("?=proc_idu()",before) |
|
Default Value |
(none) |
|
Legal Value |
(any string adhering to the BNF) |
|
纲要-Dependent |
True |