同じデータベース上の 2 人のユーザー間でレプリケーションを行う分散オブジェクト リレーショナル システムをセットアップする必要があります。つまり、User1とUser2の 2 人のユーザー を持つデータベースを取得しました。どちらも同じスクリプトを使用して、オブジェクト タイプとテーブルを作成します。これらのテーブルの一部は、各ユーザーに同じ内容を持たせる必要があるため、トリガーを使用しているため、一方に変更があると、反対側に複製されます。
DepartmentTypeという名前の UDT と、AreaTypeという名前の別の UDT があるとします。各エリアは 1 つの部門に関連付けられており、1 つの部門に複数のエリアが含まれる場合があります。したがって、AreaType には DepartmentType への参照があり、DepartmentType には AreaTypes への参照のネストされたテーブルがあります。このネストされたテーブルのタイプはNT_AreasInDepartment (たとえば) です。どちらのタイプにも Name という主キーがあります。これは Department テーブルへの挿入のトリガーです。
CREATE OR REPLACE TRIGGER NewDept
AFTER INSERT
ON DeptObj
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
INSERT INTO DIST_DeptObj VALUES (:NEW.Name, :NEW.Areas);
END NewDept;
/
機能しません。User1.NT_AreasInDepartment が予期されていましたが、User2.NT_AreasInDepartment が見つかったと表示されます (エラー ORA-00932)。私が使用する場合
INSERT INTO DIST_DeptObj VALUES (:NEW.Name, :NULL);
動作しますが、後でネストされたテーブルにレコードを挿入できません。私も次のようなものを使用してみました
INSERT INTO DIST_DeptObj VALUES (:NEW.Name, NT_AreasInDepartment());
しかし、それも機能しません。オラクルの公式フォーラムで、同じオブジェクト識別子を使用してタイプを作成できると彼らは私に言いましたが、両方のユーザーが同じシステムにいる場合、それは不可能です。
2 人のユーザーが同じオブジェクト タイプを使用する方法はありますか?
免責事項: おそらくこれは奇妙に見えますが、これを行うより簡単な方法があるかもしれませんが、これが私が要求したものです。つまり、はい、これは大学の課題です。私だったら、オラクルすら使っていないでしょう。