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 の使用法 » データベースの作成 » データベース・オブジェクトの使用

 

通常のビューの操作

データをブラウズすると、クエリは 1 つ以上のデータベース・オブジェクトで動作し、結果セットを作成します。ベース・テーブルと同様に、クエリの結果セットにもカラムとローがあります。ビューを作成するクエリには名前が与えられ、システム・テーブルに定義が格納されます。

各部署の従業員数をリストすることが頻繁にあるとします。このリストは次の文で取得できます。

SELECT DepartmentID, COUNT(*)
FROM Employees
GROUP BY DepartmentID;

Sybase Central または Interactive SQL のいずれかを使用して、この文の結果を含んだビューを作成できます。

通常のビューの SELECT 文に対する制限

通常のビューとして使用できる SELECT 文には制限があります。特に、SELECT クエリ中では ORDER BY 句を使用できません。リレーショナル・テーブルでは、ローやカラムの並び順には意味がありませんが、ORDER BY 句を使用すると、ビューのローの順序が規定されるからです。GROUP BY 句、サブクエリ、ジョインは、ビューの定義で使用できます。

ビューを作成するには、必要とする正確な結果が必要なフォーマットで得られるまで SELECT クエリを編集します。SELECT 文が作成できたら、先頭に次の句を追加するとビューが完成します。

CREATE VIEW view-name AS query;
通常のビューの更新

ビューを定義するクエリ指定が更新可能な場合、UPDATE 文、INSERT 文、DELETE 文を使用してビューを更新できます。ビューを定義するクエリ指定に次のいずれかが含まれている場合、そのビューは派生の関係で更新不可能となります。

  • UNION 句

  • DISTINCT 句

  • GROUP BY 句

  • FIRST または TOP 句

  • 集合関数

  • FROM 句に複数のテーブル (ansi_update_constraints オプションが Strict または Cursors に設定されている場合)。ansi_update_constraints オプション [互換性]を参照してください。

  • ORDER BY 句 (ansi_update_constraints オプションが Strict または Cursors に設定されている場合)。ansi_update_constraints オプション [互換性]を参照してください。

  • すべての select リスト項目がベース・テーブルのカラムではない

通常のビューのコピー

Sybase Central では、データベース間でビューをコピーできます。この作業を実行するには、Sybase Central の右ウィンドウ枠でビューを選択し、別の接続済みデータベースの [ビュー] フォルダへそれをドラッグします。新しいビューが作成されて、元のビューの定義がそこにコピーされます。新しいビューにコピーされるのは、ビューの定義だけであることに注意してください。パーミッションなど、その他のビューのプロパティはコピーされません。

WITH CHECK OPTION オプションの使用

WITH CHECK OPTION 句は、ビューを介したベース・テーブルに対する挿入時または更新時に変更されるデータを制御するときに役立ちます。次の例で説明します。

WITH CHECK OPTION 句を使用して次の文を実行し、SalesEmployees ビューを作成します。

CREATE VIEW SalesEmployees AS
   SELECT EmployeeID, GivenName, Surname, DepartmentID
   FROM Employees
   WHERE DepartmentID = 200
   WITH CHECK OPTION;

選択すると、このビューの内容が次のように表示されます。

SELECT * FROM SalesEmployees;
EmployeeID GivenName Surname DepartmentID
129 Philip Chin 200
195 Marc Dill 200
299 Rollin Overbey 200
467 James Klobucher 200
... ... ... ...

次に、Philip Chin の DepartmentID を 400 に更新しようとします。

UPDATE SalesEmployees
SET DepartmentID = 400 
WHERE EmployeeID = 129;

WITH CHECK OPTION が指定されたため、データベース・サーバは、この更新によってビュー定義 (この場合は WHERE 句の式) で違反が発生するかどうかを評価します。DepartmentID は 200 でなければならないため、この文は失敗し、データベース・サーバが「ベース・テーブル 'Employees' の挿入/更新に対して WITH CHECK OPTION が違反しています。」というエラーを返します。

ビュー定義で WITH CHECK OPTION を指定しなかった場合は更新操作が実行され、Employees テーブルが新しい値で修正されてしまい、これ以降 Philip Chin がビューから消えてしまいます。

SalesEmployees ビューを参照するビュー (たとえば View2) が作成された場合は、View2 自体に WITH CHECK OPTION 句がなくても、SalesEmployees ビューの WITH CHECK OPTION の基準に合わなければ、View2 に対する更新や挿入は拒否されます。

参照

通常のビューのステータス
通常のビューの作成
通常のビューの変更
通常のビューの削除
通常のビューの有効化と無効化
通常のビュー内のデータのブラウズ
システム・テーブル・データの表示