ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
363
363
EMPFEHLEN
-
10.01.12 12:48 #1
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:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
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 :1
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ß
ChristophAll we have to decide is what to do with the time that is given to us.
Gruß Chris
-
Hast du eine Fehlermeldung?
Zur Null-Problematik. NVL hilft da weiter
Code sql:1
SELECT NVL(NULL, 0) AS zahl FROM DUAL;
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
10.01.12 13:49 #3
das mit dem NVL ist mir schon klar, das habe ich großteils schon gelöst, es treten nur ab und zu noch Probleme mit numerischen Feldern auf, welche ich auf null setzen möchte.
die eigentliche Frage besteht eher, wieso letzerer Ansatz nicht funktioniert, bzw. ob es etwas ähnliches gibt.
Möglicherweise gibt es eine Möglichkeit über DB-Links zu iterieren ohne ein execute immediate zu verwenden?
lgAll we have to decide is what to do with the time that is given to us.
Gruß Chris
Ähnliche Themen
-
Oracle 10g: via Trigger elegant mehrere Insert auslösen
Von dexit2k im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 19.02.09, 16:24 -
Trigger bricht ab und verhindert INSERT
Von Petzge im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 27.08.07, 11:56 -
Insert-Trigger (aber ein bisschen kompliziert)
Von Migelinho im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 23.08.06, 16:22 -
[Oracle] Trigger
Von Pherseus im Forum Relationale DatenbanksystemeAntworten: 4Letzter Beitrag: 19.12.05, 13:00 -
[oracle] Trigger
Von MonkeyMan im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 04.05.04, 18:21





Zitieren

Login





