Announcement

Collapse
No announcement yet.

Update Oracle auf SQL komplette Tabelle

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

  • Update Oracle auf SQL komplette Tabelle

    Hallo zusammen,

    bin neu und brauche eure Hilfe

    leider hat die Suche keine Treffer erzielt bzw. konnte ich damit nichts anfangen und weiss auch gar nicht genau, nach welchen Stichworten.

    Folgener Ablauf:

    Einmaliger Import von einer Oracle Datenbank auf eine SQL Datenbank (SQL Server 2008). klappt perfekt

    Verbindung wurde hergestellt vom SQL Server zum Oracle Server. Select Statement funktionieren wunderbar

    Nun möchte ich die importierte SQL Tabelle regemässig updaten (die aktuellen Daten sollen aus der Oracle Tabelle geholt werden) Die Spalten bleiben immer die gleiche, es können sich NAmen, STrassen etc ändern. Eventl. kann ein zusätzlicher Adress-Datensatz hinzukommen.

    Es handelt sich um eine Kundendatenbank. Die Spalten bleiben immer gleich, lediglich können Zeilen hinzukommen.

    Wie muss ich das Update-Statement aufbauen? Bekomme es leider nicht hin.


    Beispiel nur für Namensupdate:

    UPDATE Tabelle
    SET [NAME1] = NAME1
    select Name1 from OPENQUERY(Server, 'SELECT Name1 FROM Tabelle')
    GO

  • #2
    @ Admin:

    warum verschoben und warum unter diverses?? oder ist das einfach uninteressant?

    danke

    Comment


    • #3
      Hallo,

      könnte z.B. so aussehen:[highlight=sql]--DROP TABLE [Tabelle]
      --DROP TABLE [RemoteTabelle]

      CREATE TABLE [Tabelle] ([id] int, [name] nvarchar(100))
      CREATE TABLE [RemoteTabelle] ([id] int, [name] nvarchar(100))

      INSERT INTO Tabelle values(1, 'a')
      INSERT INTO RemoteTabelle values(1, 'b')

      SELECT * FROM [Tabelle]
      SELECT * FROM [RemoteTabelle]

      UPDATE [Tabelle]
      SET [name] = r.[name]
      FROM
      [Tabelle] AS t
      JOIN OPENQUERY(server, 'SELECT [id], [name] FROM [test].[dbo].[RemoteTabelle]') AS r
      ON t.[id] = r.[id]

      SELECT * FROM [Tabelle]
      SELECT * FROM [RemoteTabelle][/highlight]Zum Test eben nur mit zwei lokalen Tabellen. Es wird allerdings trotzdem über OPENQUERY zugegriffen.

      Man muss halt noch einschränken welche Datensätze geändert werden sollen, sonst gibts ein UPDATE auf die ganze Tabelle.

      Außerdem ist es glaub ich nicht der richtige Weg die Daten abzuholen. Richtig wäre die Daten bei Änderungen in der OracleDB zu replizieren. Wenn du also Änderungen an der OracleDB vornehmen kannst würde ich zu einer Replikation raten. (In Verbindung mit Oracle vllt. dieses interessant.)

      lg chapster

      Comment


      • #4
        Hallo chapster,

        danke für die Antwort.

        Es soll eh ein Update auf die ganze Tabelle geben, da ich vorab nicht weiss, was für Daten geändert wurden. Somit bleibt mir nur dieser Weg.

        Das die Replikation der eigentlich richtige Weg, weiss ich: Nur leider fehlt mir dazu die Erfahrung. Dies muss ja an der Oracle Datenbank erstellt werden.

        Ich habe zwar Vollzugriff auf die Oracle Datenbank. Jedoch kommt diese von einem Drittanbieter. Normale Updates etc mache ich. Da diese Datenbank aber Landesweit im Netzwerk genutzt wird, lasse von Spieleren derzeit noch die Finger. Wiederherstellung ist zu mühsam.

        Werd deinen Vorschlag mal probieren und mich wieder melden.

        Danke

        Comment


        • #5
          Originally posted by rephlex View Post
          @ Admin:

          warum verschoben und warum unter diverses?? oder ist das einfach uninteressant?
          Wenn du es nicht vernünftig einsortieren kannst...
          Und im SQL-Forum hat die Replikation zweier Datenbanken mit unterschiedlichen DBMS nunmal nichts (oder nicht viel) zu suchen. Deshalb (erstmal) hier.

          Gruß Falk
          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


          • #6
            Originally posted by chapster View Post
            Hallo,

            könnte z.B. so aussehen:[highlight=sql]--DROP TABLE [Tabelle]
            --DROP TABLE [RemoteTabelle]

            CREATE TABLE [Tabelle] ([id] int, [name] nvarchar(100))
            CREATE TABLE [RemoteTabelle] ([id] int, [name] nvarchar(100))

            INSERT INTO Tabelle values(1, 'a')
            INSERT INTO RemoteTabelle values(1, 'b')

            SELECT * FROM [Tabelle]
            SELECT * FROM [RemoteTabelle]

            UPDATE [Tabelle]
            SET [name] = r.[name]
            FROM
            [Tabelle] AS t
            JOIN OPENQUERY(server, 'SELECT [id], [name] FROM [test].[dbo].[RemoteTabelle]') AS r
            ON t.[id] = r.[id]

            SELECT * FROM [Tabelle]
            SELECT * FROM [RemoteTabelle][/highlight]Zum Test eben nur mit zwei lokalen Tabellen. Es wird allerdings trotzdem über OPENQUERY zugegriffen.

            Man muss halt noch einschränken welche Datensätze geändert werden sollen, sonst gibts ein UPDATE auf die ganze Tabelle.

            Außerdem ist es glaub ich nicht der richtige Weg die Daten abzuholen. Richtig wäre die Daten bei Änderungen in der OracleDB zu replizieren. Wenn du also Änderungen an der OracleDB vornehmen kannst würde ich zu einer Replikation raten. (In Verbindung mit Oracle vllt. dieses interessant.)

            lg chapster
            Das hat geklappt für einzelnen Spalten, ich will aber die ganze Tabelle updaten. Muss ich da jede Spalte aufführen oder gibts da auch ne Zusammenfassung?

            Comment


            • #7
              Hallo,
              Originally posted by rephlex View Post
              Muss ich da jede Spalte aufführen oder gibts da auch ne Zusammenfassung?
              Nein, Zusammenfassung gibt es dafür keine.
              Du kannst es ein wenig verkürzen indem du SELECT * im OPENQUERY angibst. Somit werden alle Spalten gelesen und du musst nicht alle angeben.
              Im Update muss jedoch jedes Feld angegeben werden.

              z.B:[highlight=sql]UPDATE [Tabelle]
              SET [name] = r.[name],
              [Spalte2] = r.[Spalte2],
              [Spalte3] = r.[Spalte3],
              ...
              FROM
              [Tabelle] AS t
              JOIN OPENQUERY(server, 'SELECT * FROM [test].[dbo].[RemoteTabelle]') AS r
              ON t.[id] = r.[id][/highlight]

              lg chapster

              Comment


              • #8
                danje für die Infos. mit dem select im openquery hab ichs auch gemacht.

                werd mich aber doch mit der replikation beschäftigen. das ist die bessere lösung.

                hat wer ne gute anleitung für replikation?

                Comment

                Working...
                X