预订级别、组级别或用户级别的水平过滤使用 SQL 子句来从源数据源选择数据。SQL 子句的内容由高级预订定义笔记本的“行”页(对于 DB2 DataPropagator 预订)和高级复制预订笔记本的“行”页(对于 JDBC 预订)控制。要打开这两个笔记本中的任一个:
要在预订级别过滤数据
在预订笔记本的行页上,在需要所有行框中输入 SQL 子句。必须使用以下格式在一行上输入整个 SQL 子句:
city='myValue'
不要在 SQL 子句开头输入 WHERE。WHERE 会自动追加至框中输入的子句。例如, 以下子句将仅对城市列值等于 Los Angeles 的列进行同步:
city='Los Angeles, CA 90061'
要在组级别过滤数据
city=':fcity.'
其中,:fcity. 是表示列值的参数。
我们建议您使用附加的文本来唯一标识参数名。例如,用冒号(:)开始参数名,并以句点(.)结束它。
Los Angeles, CA 90061
还可使用特殊值。值 $USERNAME 允许将 Sync Server 用户标识作为参数值插入。 这允许您将特定用户创建的行插入数据源, 并在特定字段中插入他们的 Sync Server 用户标识。
指定给此组的每个用户将仅接收来自 VNPERSON 表且城市列值等于 Los Angeles, CA 90061 的行。其他组将接收整个 VNPERSON 表或 VNPERSON 表的特定子集,这要视配置的过滤器而定。
要在用户级别过滤数据
city=':fcity.' and id=':fid.'
其中 :fcity. 是表示城市列值的参数, 而 :fid. 是表示标识列值的参数。
Los Angeles, CA 90061
900000401
该用户将只接收城市列值为 Los Angeles, CA 90061 且标识列值为 900000401 的记录。VNPERSON 中有一个记录具有此值。指定给同一个组的其他用户将只接收 VNPERSON 表中城市列值等于 Los Angeles, CA 90061 且具有用户的数据过滤器设置的用户列值的行。其他组将接收整个 VNPERSON 表或 VNPERSON 表的特定子集,这要视配置的过滤器而定。
数据库和用户管理方面的一些复杂情况要求在个别用户的行子集字段中定义复杂的 SQL WHERE 子句,以便对一个组或用户可以查看的行进行限制。在定义过滤器时,您可能想引用镜像数据库中的表,对组或用户使用参数,或使用这些方法的组合。有关创建简单水平过滤器的基本步骤,参见定义简单水平过滤器。
DB2 Everyplace Sync Server 提供了标准 SQL WHERE 实现的一个子集来与过滤器配合使用。有关子集的语法,参见过滤器的语法。
以下示例演示如何引用镜像数据库中的其他表以及对水平过滤使用参数。
假定您管理两个分别名为 Ziptab 和 Business 的表,它们都位于镜像数据库中。Ziptab 包含特定城市的邮政编码(参见表 4),而 Business 跟踪一些公司和它们的邮政编码(参见表 5)。您想要让 San Jose, California 的用户只查看他们所在城市的商业公司。您已创建一个组并将这些用户指定给了该组。
City | Zipcode |
---|---|
San Jose | 95141 |
San Jose | 95123 |
Los Angeles | 93002 |
Business | Zip |
---|---|
IBM | 95141 |
我的公司 | 95123 |
您的公司 | 93002 |
另一公司 | 94888 |
您将在“行”页的个别用户的行子集字段中输入以下子句:
(Zip) IN (SELECT Zipcode FROM Ziptab WHERE City = ':fcity.'):fcity. 是 City 列值的参数,对于该组,设置为 San Jose。
然后,填写并关闭“创建预订”笔记本。结果是,在同步之后,这些用户在他们的设备上只看到 Business
表中的下列各行:
Business | Zip |
---|---|
IBM | 95141 |
我的公司 | 95123 |
当在“移动设备管理中心”(MDAC)中创建复制预订时,可以在 SQL 中使用类似于 WHERE 子句的子句来为个别用户进行过滤。在“高级复制预订”笔记本(对于 DataPropagator 预订)或“高级复制预订”笔记本(对于 JDBC 预订)的个别用户的行子集字段中输入该子句。
在使用如下的语法图时,有一些限制。这些限制包括:
Filter .-logic operator AND or OR-. V | >>---| dimension |------------+-------------------------------->< dimension |--+-column-name--IN--| subselect |-----------+-----------------| | .-,-----------. | | V | | +-(----column-name-+--)--IN--| subselect |-+ '-| simpleUnaryFilter |--------------------' subselect |--(--| selectClause |--| fromClause |--+-----------------+-----> '-| whereClause |-' >--)------------------------------------------------------------| selectClause .-,-----------. V | |--SELECT----column-name-+--------------------------------------| fromClause |--FROM--| tableReference |-------------------------------------| whereClause |--WHERE--| simpleFilter |--------------------------------------| tableReference |--+----------------+--table-name-------------------------------| '-schema-name--.-' simpleFilter .-logic operator AND or OR-. V | |----| simpleUnaryFilter |----+---------------------------------| simpleUnaryFilter |--+-NOT--| simpleUnaryFilter |-+-------------------------------| +-(--| simpleFilter |--)-----+ '-| simplePredicate |--------' simplePredicate |--| expression |--| simplePredicateEnd |-----------------------| expression |--+-| function |-+---------------------------------------------| +-column-name--+ '-| constant |-' function |--+----------------+--function-name--(-------------------------> '-schema-name--.-' >--+--------------------+--)------------------------------------| | .-,--------------. | | V | | '---| expression |-+-' simplePredicateEnd |--+-+-| operator |-+--| expression |----------------------+----| | '-IN-----------' | +-IS--+-----+--NULL-------------------------------------+ | '-NOT-' | '-+-----+--BETWEEN--| expression |--AND--| expression |-' '-NOT-' operator |--+-=----+-----------------------------------------------------| +-<>---+ +->----+ +-<----+ +->=---+ +-<=---+ +-!=---+ +-!<---+ +-!>---+ '-LIKE-'