Announcement

Collapse
No announcement yet.

Problem mit Linked Server Oracle -> SQL Server und CLOB

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit Linked Server Oracle -> SQL Server und CLOB

    Hallo,

    ich habe folgendes Problem:

    Ich habe eine Oracle 10g Datenbank, die in einer Tabelle ein CLOB Datenfeld enthält.

    Nun existiert von der Oracle Datenbank aus eine Linked Server Verbindung auf eine SQL Server 2000 Datenbank. Dort existiert die gleiche Tabelle, mit einer Spalte vom Typ TEXT analog zur Spalte CLOB auf Oracle. Diese Spalte muss CLOB bzw. TEXT sein, da sie Texte mit einer Länge von über 4000 Zeichen enthält.

    Wird nun in die Tabelle mit dem CLOB Feld ein neuer Datensatz eingefügt oder aktualisiert, dann sollen die Änderungen über einen Trigger (After Insert) auf die SQL Server Datenbank übertragen werden.

    Und genau hier beginnt das Problem:

    Wenn ich im Trigger sage:

    INSERT INTO "TabelleXY"@SqlServerDB
    (
    Spalte1,
    Spalte2,
    ClobSpalte3
    )
    VALUES
    (
    :new.SPALTE1,
    :new.SPALTE2,
    :new.CLOB_SPALTE3
    );

    dann kann ich den Trigger nicht kompilieren, da :new.ClobSpalte3 nur ein LOB Locator (Pointer) ist und dieser logischer Weise nicht auf den SQL Server übertragen werden kann.

    INSERT INTO "Tabelle_XY"@SqlServerDB
    (
    "Spalte1",
    "Spalte2",
    "ClobSpalte3"
    )
    SELECT
    SPALTE1,
    SPALTE2,
    CLOB_SPALTE3
    )
    FROM TABELLE_XY
    WHERE SPALTE1 = :new.SPALTE1;

    funktioniert auch nicht, da der SELECT Teil dann anscheinend auf dem SQL Server ausgeführt wird und dieser nicht auf die Oracle Datenbank zugreifen kann.

    Auch

    INSERT INTO "Tabelle_XY"@SqlServerDB
    (
    "Spalte1",
    "Spalte2",
    "ClobSpalte3"
    )
    SELECT
    :new.SPALTE1,
    :new.SPALTE2,
    :new.CLOB_SPALTE3
    )
    FROM DUAL;

    geht nicht...

    So langsam bin ich mit meinem Latein am Ende.

    Hat evtl. schon mal jemand die gleiche Problematik gehabt und kann mir da weiter helfen?

    Vielen Dank im Voraus

  • #2
    Hallo Michael,

    vergiß die CLOB-Spalte beim Insert, das wird nicht funktionieren. Das Insert also nur so:

    INSERT INTO "TabelleXY"@SqlServerDB
    (
    Spalte1,
    Spalte2
    )
    VALUES
    (
    :new.SPALTE1,
    :new.SPALTE2
    );

    Anschließend dann mit dem LOB-Locator und dem Package DBMS_LOB und den darin enthaltenen Funktionen (z.B. getlength, read, substr) den Text - notfalls in mehreren Häppchen - per Update in das TEXT-Feld des SQL-Server schreiben. Evtl. lassen sich dafür wiederum Routinen auf dem SQL-Server verwenden.

    Gruß Fal
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo Falk,

      danke für deine Hinweise! Mit diesen konnte ich nun das Problem lösen.

      Gruß Michae

      Comment

      Working...
      X