2013-05-08 14 views
8

Ich habe ein Skript, das ich in SQL Server verwenden, aber ich muss es in ein Oracle-Format konvertieren. Kann jemand helfen?Aktualisieren mehrerer Spalten aus einer anderen Tabelle - Oracle-Format benötigt

UPDATE PERSONS P SET 
     P.JOBTITLE=TE.JOBTITLE, 
     P.LAST_NAME=TE.LAST_NAME, 
     P.FIRST_NAME=TE.FIRST_NAME, 
     P.DBLOGIN_ID=TE.DBLOGIN_ID, 
     P.EMAIL_ID=TE.EMAIL_ID, 
     P.USERLEVEL=TE.USERLEVEL, 
     P.FACILITY_ID=TE.FACILITY_ID, 
     P.SUPERVISOR=TE.SUPERVISOR, 
     P.DEPARTMENT=TE.DEPARTMENT, 
     P.WINLOGINID=TE.WINLOGINID 
    FROM TEMP_ECOLAB_PERSONS TE 
    WHERE P.PERSON=TE.PERSON; 

- Aus dem Artikel unten kam ich mit der folgenden Aussage. Es funktioniert leider immernoch nicht:

UPDATE (SELECT P.JOBTITLE, P.LAST_NAME, P.FIRST_NAME, P.DBLOGIN_ID, P.EMAIL_ID, 
     P.USERLEVEL, P.FACILITY_ID, P.SUPERVISOR, P.DEPARTMENT, 
     TE.JOBTITLE, TE.LAST_NAME, TE.FIRST_NAME, TE.DBLOGIN_ID, TE.EMAIL_ID, 
     TE.USERLEVEL, TE.FACILITY_ID, TE.SUPERVISOR, TE.DEPARTMENT 
    FROM PERSONS P, TEMP_ECOLAB_PERSONS TE WHERE P.PERSON=TE.PERSON) 
    SET 
    P.JOBTITLE=TE.JOBTITLE, 
    P.LAST_NAME=TE.LAST_NAME, 
    P.FIRST_NAME=TE.FIRST_NAME, 
    P.DBLOGIN_ID=TE.DBLOGIN_ID, 
    P.EMAIL_ID=TE.EMAIL_ID, 
    P.USERLEVEL=TE.USERLEVEL, 
    P.FACILITY_ID=TE.FACILITY_ID, 
    P.SUPERVISOR=TE.SUPERVISOR, 
    P.DEPARTMENT=TE.DEPARTMENT; 

Antwort

8

So würde ich es machen. Es ist vielleicht nicht die beste Leistung, aber es funktioniert.

Das obige Skript aktualisiert Informationen in PERSONS_TMP Tabelle mit Daten aus PERSONS-Tabelle. Ich glaube an deinen Fall, du willst es andersherum. Stellen Sie daher sicher, dass Sie vor dem Ausführen des Skripts die erforderlichen Änderungen vornehmen.

Sie können die Klausel "WHEN NOT MATCHED THEN ...." zu obigem SQL hinzufügen, falls Sie neue Datensätze einfügen müssen, wenn sie nicht existieren.

+0

folgt habe ich was (glaube ich), sagte der Artikel oben zu tun. Immer noch nicht für mich leider nicht funktioniert. – PhelpsK

+0

Entschuldigung für die Verwirrung mit dem Link zu Toms Website. Ich habe das Skript von Toms Webseite ausprobiert und es hat auch nicht funktioniert. Also habe ich den Link zu seiner Website entfernt. – donny

+0

Es hat funktioniert, danke! – PhelpsK

12
UPDATE PERSONS P 
    SET (jobtitle, 
     last_name, 
     first_name, 
     dblogin_id, 
     email_Id, 
     userlevel, 
     facility_id, 
     supervisor, 
     department, 
     winloginid) = (select jobtitle, 
           last_name, 
           first_name, 
           dblogin_id, 
           email_Id, 
           userlevel, 
           facility_id, 
           supervisor, 
           department, 
           winloginid 
         from TEMP_ECOLAB_PERSONS TE 
         where TE.PERSON=P.PERSON); 

Beachten Sie, dass, wenn es andere Zeilen in Personen vorhanden sind, die nicht in temp_ecolab_persons sind, diese zusätzlichen Zeilen in der Tabelle person wird auf null gesetzt werden (oder könnte die Anweisung nicht mit NOT NULL Fehler die Ursache Wenn dies der Fall ist, benötigen Sie möglicherweise eine where-Klausel in der update-Anweisung, um diese einzuschränken. Wenn ich beispielsweise weiß, dass das Feld email_id in einigen Datensätzen eingetragen ist, aber nicht in anderen, kann ich die Aktualisierung auf diese Zeilen beschränken als

UPDATE PERSONS P 
    SET (jobtitle, 
     last_name, 
     first_name, 
     dblogin_id, 
     email_Id, 
     userlevel, 
     facility_id, 
     supervisor, 
     department, 
     winloginid) = (select jobtitle, 
          last_name, 
          first_name, 
          dblogin_id, 
          email_Id, 
          userlevel, 
          facility_id, 
          supervisor, 
          department, 
          winloginid 
         from TEMP_ECOLAB_PERSONS TE 
         where TE.PERSON=P.PERSON) 
    WHERE email_id is null;