Автоматическое обновление таблицы Oracle SQL из другой базы данных - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть две таблицы из разных баз данных, db1.names и db2.names_rep.db1.names постоянно получает новые данные, и мне нужно, чтобы они отображались в db2.names_rep.

Я создал dblink-соединение для db1 в db2 с именем dblink_db1.

CREATE DATABASE LINK dblink_db1
CONNECT TO user IDENTIFIED BY pass
  USING '(DESCRIPTION=
  (ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))
  (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=SID)))';

итриггер, вызывающий таблицу db1.names

create or replace trigger "names_trigger"
    after insert or update or delete on "names@dblink_db1"
for each row
begin
    if inserting then
          insert into "names_rep" (name_id, student_names)
          values (:NEW.name_id, :NEW.student_names);
    elsif updating then
          update "names_rep"
          set name_id=:NEW.name_id, student_names=:NEW.student_names
          where name_id=:NEW.name_id;
    elsif deleting then
          delete from "names_rep"
          where name_id=:OLD.name_id;
    end if;
end;

dblink работает, поскольку я могу успешно вызвать этот запрос в db2

select * from names@dblink_db1 

Я получаю сообщение об ошибке

Отчет об ошибке: ORA-00942: таблица или представление не существует 00942. 00000 - «таблица или представление не существует» * Причина:
* Действие:

Наконец, я читал об Oracle Streams.Это альтернатива триггерам?Я надеюсь, что мне не нужно указывать каждую операцию относительно того, что делается в Trigger

1 Ответ

0 голосов
/ 18 апреля 2019

Вы пытаетесь создать триггер в базе данных db2 для таблицы в db1.Я не уверен, что это возможно.

Я думаю, что триггер нужно создать в db1 и вставлять / обновлять / удалять строки по ссылке на db2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...