tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
363
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Biergamasda
    Biergamasda Biergamasda ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    373
    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ß
    Christoph
     
    All we have to decide is what to do with the time that is given to us.

    Gruß Chris

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  3. #3
    Avatar von Biergamasda
    Biergamasda Biergamasda ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    373
    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?

    lg
     
    All we have to decide is what to do with the time that is given to us.

    Gruß Chris

Ähnliche Themen

  1. Oracle 10g: via Trigger elegant mehrere Insert auslösen
    Von dexit2k im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 19.02.09, 16:24
  2. Trigger bricht ab und verhindert INSERT
    Von Petzge im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 27.08.07, 11:56
  3. Insert-Trigger (aber ein bisschen kompliziert)
    Von Migelinho im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 23.08.06, 16:22
  4. [Oracle] Trigger
    Von Pherseus im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 19.12.05, 13:00
  5. [oracle] Trigger
    Von MonkeyMan im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 04.05.04, 18:21