Biergamasda
Erfahrenes Mitglied
Hallo Leute,
folgender Sachverhalt:
Master Datenbank mit n Child Datenbanken welche über Database links angebunden sind. Ich möchte nun über einen Trigger inserts in der Master-DB auch auf die Child-DB's verteilen.
Hierzu führe ich in einer Tabelle alle Linknamen mit. Wenn ich diese auslese ist es notwendig, über "execute immediate" zu arbeiten, da diese sonst nicht aufgelöst werden. Ich möchte nun bei einem Insert einen Trigger feuern, welcher die neue Zeile auch auf die Slaves verteilt. Hierzu habe ich folgenden Code:
dieser funktioniert jedoch nicht, und ich weiß nicht wieso - hierbei treten aber so und so noch Probleme mit NULL Values auf, da man diese explizit abfangen muss!!
Was ich auch versucht habe, ist folgendes:
wobei das auch nicht funktioniert.
Hat hier vl jemand eine Idee bzw. einen Lösungsansatz wie ich das lösen könnte?
Danke schon im Voraus
Gruß
Christoph
folgender Sachverhalt:
Master Datenbank mit n Child Datenbanken welche über Database links angebunden sind. Ich möchte nun über einen Trigger inserts in der Master-DB auch auf die Child-DB's verteilen.
Hierzu führe ich in einer Tabelle alle Linknamen mit. Wenn ich diese auslese ist es notwendig, über "execute immediate" zu arbeiten, da diese sonst nicht aufgelöst werden. Ich möchte nun bei einem Insert einen Trigger feuern, welcher die neue Zeile auch auf die Slaves verteilt. Hierzu habe ich folgenden Code:
Code:
create or replace
TRIGGER INSERT_BOOKING
AFTER INSERT ON BOOKING
FOR EACH ROW
DECLARE
exec_string varchar2(1000);
BEGIN
for rec in (select dblink_name as lnk from databases where dblink_name is not null) loop
exec_string := 'INSERT INTO booking@'||rec.lnk||' VALUES ('||:new.bookid||', '||:new.roomno||', '||:new.adminpass||', '||:new.userpass||', TO_TIMESTAMP("'||:new.starttime||'", "DD.MM.RR HH24:MI:SS,FF"), TO_TIMESTAMP("'||:new.endtime||'", "DD.MM.RR HH24:MI:SS,FF"), '||:new.description||', '||:new.confowner||', '||:new.adminflags||', '||:new.userflags||', '||:new.master_id||', '||:new.running_on_server||', '||:new.is_anytime||', '||:new.is_series||', TO_TIMESTAMP("'||:new.datereq||'", "DD.MM.RR HH24:MI:SS,FF"), TO_TIMESTAMP("'||:new.datemod||'", "DD.MM.RR HH24:MI:SS,FF"), '||:new.is_locked||', '||:new.region||', '||:new.site||')';
dbms_output.put_line('executing: '||exec_string);
execute immediate exec_string;
end loop;
COMMIT;
END;
dieser funktioniert jedoch nicht, und ich weiß nicht wieso - hierbei treten aber so und so noch Probleme mit NULL Values auf, da man diese explizit abfangen muss!!
Was ich auch versucht habe, ist folgendes:
Code:
exec_string := 'INSERT INTO booking@'||rec.lnk||' b1 SELECT * from booking b2 where b2.bookid='||:new.bookid;
wobei das auch nicht funktioniert.
Hat hier vl jemand eine Idee bzw. einen Lösungsansatz wie ich das lösen könnte?
Danke schon im Voraus
Gruß
Christoph