Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 语句 » SQL 语句 (A-D)

 

CREATE PUBLICATION 语句 [MobiLink] [SQL Remote]

此语句用于创建发布。在 MobiLink 中,发布可以标识 SQL Anywhere 远程数据库中的同步数据。在 SQL Remote 中,发布可以标识统一数据库和远程数据库中的复制数据。

语法 1(MobiLink 通用)
CREATE PUBLICATION [ owner.]publication-name
( article-definition, ... )
article-definition :
  TABLE table-name [ ( column-name, ... ) ]
[ WHERE search-condition ]
语法 2(MobiLink 脚本式上载)
CREATE PUBLICATION [ owner.]publication-name
WITH SCRIPTED UPLOAD 
( article-definition, ... )
article-definition :
  TABLE table-name [ ( column-name, ... ) ] 
[ USING ( [ PROCEDURE ] [ owner.][procedure-name ] 
   FOR UPLOAD { INSERT | DELETE | UPDATE }, ... ) ]
语法 3(MobiLink 仅下载发布)
CREATE PUBLICATION [ owner.]publication-name
FOR DOWNLOAD ONLY
( article-definition, ... )
article-definition :  TABLE table-name [ ( column-name, ... ) ]
语法 4 (SQL Remote)
CREATE PUBLICATION [ owner.]publication-name
( article-definition, ... )
article-definition :
  TABLE table-name [ ( column-name, ... ) ]
[ WHERE search-condition ]
[ SUBSCRIBE BY expression ]
参数
  • article-definition   发布是由项目构建而成。若要包含多个项目,请使用逗号分隔各项目定义。每个项目都是一个表或表的一部分。项目可以是表的垂直分区(表列的子集)、水平分区(基于 WHERE 子句的表行的子集)或垂直水平分区。

    在语法 2(用于执行脚本式上载的发布)中,项目说明还会注册用于定义上载的脚本。请参见创建脚本式上载发布

    在语法 3(用于仅下载发布)中,项目仅指定要下载的表和列。

  • WHERE 子句   WHERE 子句定义项目中包括的表行子集的一种方法。

    在 MobiLink 应用程序中,WHERE 子句会影响上载中所包含的行。(下载由 download_cursor 脚本定义。)在 MobiLink SQL Anywhere 远程数据库中,WHERE 子句只能引用包含在项目中的列,而不能包含子查询、变量或非确定性函数。

  • SUBSCRIBE BY 子句   在 SQL Remote 中,定义要包含在项目中的表行子集的一种方法是使用 SUBSCRIBE BY 子句。此子句允许多个不同的预订者在单个发布定义中接收来自某表的不同行。

注释

CREATE PUBLICATION 语句可在数据库中创建一个发布。可以通过指定所有者名称为另一个用户创建发布。

在 MobiLink 中,发布在 SQL Anywhere 远程数据库中是必需的,而在 UltraLite 数据库中却是可选的。这些发布以及对它们的预订决定了将哪些数据上载到 MobiLink 服务器。

应使用 CREATE SYNCHRONIZATION SUBSCRIPTION 语句或 ALTER SYNCHRONIZATION SUBSCRIPTION 语句中的 ADD OPTION 子句为 MobiLink 发布设置选项。

语法 2 创建用于脚本式上载的发布。USING 子句用于注册想要用于定义上载的存储过程。对于每个表,最多可使用三个存储过程:分别用于插入、删除和更新。

语法 3 创建可在没有日志文件的情况下进行同步的仅下载发布。当同步仅下载发布时,下载行可能会覆盖对远程数据库中的那些行所做的更改。

在 SQL Remote 中,发布是一种双向操作,因为在统一数据库和远程数据库中都可以输入数据。在 SQL Remote 安装中,任何统一数据库和所有远程数据库都必须定义相同的发布。从统一数据库运行 SQL Remote 抽取实用程序时,将在远程数据库中自动执行正确的 CREATE PUBLICATION 语句。

权限

必须具有 DBA 权限。要求可以对语句中引用的所有表进行独占访问。

副作用

自动提交。

另请参见
标准和兼容性
  • SQL/2003   服务商扩充。

示例

下面的语句发布两个表中的所有列和行。

CREATE PUBLICATION pub_contact (
   TABLE Contacts,
   TABLE Company
);

下列语句仅发布一个表中的某些列。

CREATE PUBLICATION pub_customer (
   TABLE Customers ( ID, CompanyName, City )
);

下列语句包含一个测试 Customers 表 Status 列的 WHERE 子句,因此只发布活动的客户行。

CREATE PUBLICATION pub_customer (
   TABLE Customers ( ID, CompanyName, City, State, Status )
   WHERE Status = 'active'
);

下列语句提供预订者值,因此仅发布某些行。此方法只能在 SQL Remote 中使用。

CREATE PUBLICATION pub_customer (
   TABLE Customers ( ID, CompanyName, City, State )
   SUBSCRIBE BY State
);

创建 SQL Remote 预订时,按如下所示使用预订者值。

CREATE SUBSCRIPTION TO pub_customer ( 'NY' )
   FOR jsmith;

下例创建使用脚本式上载的 MobiLink 发布:

CREATE PUBLICATION pub WITH SCRIPTED UPLOAD (
      TABLE t1 (a, b, c) USING (
         PROCEDURE my.t1_ui FOR UPLOAD INSERT,
         PROCEDURE my.t1_ud FOR UPLOAD DELETE,
         PROCEDURE my.t1_uu FOR UPLOAD UPDATE
      ),
      TABLE t2 AS my_t2 USING (
         PROCEDURE my.t2_ui FOR UPLOAD INSERT
      )
   );

以下示例创建仅下载发布:

CREATE PUBLICATION p1 FOR DOWNLOAD ONLY (
   TABLE t1
);