我必须建立一个分布式对象关系系统,在同一数据库上的两个用户之间进行复制。也就是说,我有一个包含两个用户 User1和User2的数据库。它们都使用相同的脚本来创建对象类型和表。其中一些表需要在每个用户上具有相同的内容,因此我使用触发器,因此只要一侧发生更改,它就会在另一侧复制。
假设有一个名为DepartmentType的 UDT和另一个名为AreaType的 UDT 。每个Area都与一个Department相关,一个Department可能包含多个Area。因此,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());
但它也不起作用。在 oracle 官方论坛中,他们告诉我我可以使用相同的对象标识符来创建类型,但鉴于两个用户都在同一个系统中,这是不可能的。
有没有办法让两个用户使用相同的对象类型?
免责声明:可能这看起来很奇怪,并且可能有更简单的方法可以做到这一点,但恐怕这是我被要求的。也就是说,是的,这是一项大学作业。如果由我决定,我什至不会使用 Oracle。