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 文 [Mobile Link] [SQL Remote]

この文は、パブリケーションを作成するために使用します。Mobile Link では、パブリケーションが SQL Anywhere リモート・データベース内の同期データを識別します。SQL Remote では、統合データベース内とリモート・データベース内の両方のレプリケートされたデータがパブリケーションによって識別されます。

構文 1 (Mobile Link の一般的な使用方法)
CREATE PUBLICATION [ owner.]publication-name
( article-definition, ... )
article-definition :
  TABLE table-name [ ( column-name, ... ) ]
[ WHERE search-condition ]
構文 2 (Mobile Link のスクリプト化されたアップロード)
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 (Mobile Link のダウンロードのみパブリケーション)
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 句   テーブル・ローのサブセットをアーティクルに含めるように定義します。

    Mobile Link アプリケーションでは、WHERE 句はアップロードに含まれているローに影響します(ダウンロードについては download_cursor スクリプトで定義されます)。Mobile Link の SQL Anywhere リモート・データベースでは、WHERE 句は、アーティクルに含まれているカラムのみを参照できます。また、サブクエリ、変数、または非決定的関数を含めることはできません。

  • SUBSCRIBE BY 句   SQL Remote の場合、アーティクルに含めるテーブル・ローのサブセットを定義するには、SUBSCRIBE BY 句を使用する方法があります。この句を使用すると単一のパブリケーション定義を使って複数のサブスクライバが 1 つのテーブルの別々のローを受信できます。

備考

CREATE PUBLICATION 文はデータベースにパブリケーションを作成します。所有者名を指定すれば、別のユーザのパブリケーションも作成できます。

Mobile Link では、パブリケーションは SQL Anywhere リモート・データベースでは必須で、Ultra Light データベースではオプションです。このようなパブリケーションとそれに対するサブスクリプションによって、Mobile Link サーバにアップロードされるデータが決定されます。

Mobile Link パブリケーションのオプションは、CREATE SYNCHRONIZATION SUBSCRIPTION 文または ALTER SYNCHRONIZATION SUBSCRIPTION 文の ADD OPTION 句で設定します。

構文 2 はスクリプト化されたアップロードのパブリケーションを作成します。USING 句を使用して、アップロードの定義に使用するストアド・プロシージャを登録します。各テーブルで、3 つまでのストアド・プロシージャ (挿入、削除、更新用のプロシージャを 1 つずつ) を使用できます。

構文 3 は、ログ・ファイルなしで同期できるダウンロード専用パブリケーションを作成します。ダウンロードのみのパブリケーションが同期されると、ダウンロードされたローは、リモート・データベースのローに加えられた変更を上書きします。

SQL Remote では、パブリッシュは双方向オペレーションなので、データは統合データベースとリモート・データベースのどちらへでも入力できます。SQL Remote インストール環境では、統合データベースとすべてのリモート・データベースのパブリケーション定義は同じにします。統合データベースで SQL Remote 抽出ユーティリティを実行すると、リモート・データベースで自動的に正しい CREATE PUBLICATION 文が実行されます。

パーミッション

DBA 権限が必要です。文中で参照されるすべてのテーブルに対する排他アクセスが必要です。

関連する動作

オートコミット。

参照
標準と互換性
  • SQL/2003   ベンダ拡張。

次の文は、2 つのテーブルのすべてのカラムとローをパブリッシュします。

CREATE PUBLICATION pub_contact (
   TABLE Contacts,
   TABLE Company
);

次の文は、1 つのテーブルの一部のカラムのみをパブリッシュします。

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'
);

次の文は、subscribe-by 値を与えて一部のローのみをパブリッシュします。この方法を使用できるのは、SQL Remote の場合のみです。

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

subscribe-by 値は、SQL Remote サブスクリプションの作成時に次のように使用されます。

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

次の例は、スクリプト化されたアップロードを使用する Mobile Link パブリケーションを作成します。

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
);