表領域T1にテーブルXがあり、表領域T2にテーブルYがあります。(Oracle DB)
表領域T1にトリガーを作成する必要があります。このトリガーは、表Xの列Cを更新したときに、表Y(表領域T2)の列Dを更新します。
それらは異なるテーブルスペースにあるため、私の最初の質問は、これを実行できるかどうかです。
そして、もしそうなら、それはどのように行うことができますか?そのようなことをするためにどのような特権が必要ですか?
表領域T1にテーブルXがあり、表領域T2にテーブルYがあります。(Oracle DB)
表領域T1にトリガーを作成する必要があります。このトリガーは、表Xの列Cを更新したときに、表Y(表領域T2)の列Dを更新します。
それらは異なるテーブルスペースにあるため、私の最初の質問は、これを実行できるかどうかです。
そして、もしそうなら、それはどのように行うことができますか?そのようなことをするためにどのような特権が必要ですか?
表領域とはあまり関係ありません。ただし、テーブル(およびその特定の列)に挿入するには特権が必要です。テーブルYがトリガー以外のスキーマにある場合は、修飾されたテーブル名を使用する必要があります。(Oracleでは、schemanameはオブジェクトを所有するユーザーの名前です)
CREATE TRIGGER aur_x
AFTER UPDATE OF c ON x
FOR EACH ROW
UPDATE schema_containing_y.Y SET D = ...
;
編集:
スキーマとテーブルスペースの違いに慣れていないかもしれないと私は思いついたので、ここに簡単な説明があります。表領域は論理ストレージコンテナです。データファイル、拡張特性、ログの種類などを定義します。表領域は、スキーマオブジェクト(テーブル、インデックス、ビュー定義だけでなく、パッケージやストアドプロシージャ定義など)に関連付けられたデータを格納するために使用できます。
スキーマはオブジェクト(テーブル、ビュー、パッケージなど)のコレクションです。これらのオブジェクトはユーザーが所有します。私が知る限り、スキーマの名前は、オブジェクトを所有するユーザーと同じです。オブジェクトは、1つ以上のテーブルスペースによって提供されるストレージに依存していますが、テーブルスペース自体はスキーマオブジェクトではありません。
通常、スキーマは機能的に関連するオブジェクトをグループ化するために使用されます(たとえば、通常、1つのアプリケーションに対して1つのスキーマを作成します)。表スペースは、特に1つのアプリケーションのすべてのオブジェクトを保管するために作成することもできますが、異なる特性を持つ表に対して異なる表スペースを作成することもできます。
通常、アプリケーション開発者はテーブルスペースについてあまり心配する必要はありません。DBAは通常、バックアップ計画などに便利な方法でそれらを設定します。