Мне нужно настроить распределенную объектно-реляционную систему с репликацией между двумя пользователями в той же базе данных .То есть у меня есть база данных с двумя пользователями User1 и User2 .Оба они используют один и тот же сценарий для создания типов объектов и таблиц.Некоторые из этих таблиц должны иметь одинаковое содержимое для каждого пользователя, поэтому я использую триггеры, поэтому всякий раз, когда происходит изменение на одной стороне, оно реплицируется на другой стороне.
Предположим, существует UDT с именем DepartmentType и еще один с именем AreaType .Каждый Район связан с одним Департаментом, и Департамент может включать много Районов.Итак, 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.