Thema: Delphi Problem mit MERGE Befehl

Einzelnen Beitrag anzeigen

Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#8

AW: Problem mit MERGE Befehl

  Alt 10. Jul 2010, 15:42
Das Problem scheint irgendwie damit zusammenzuhängen, dass bei dem inneren Select (teilweise) eine leer Menge heraus gekommen ist. Wenn ich das MERGE nun so gestalte, dass immer mindestens ein Datensatz in dieser Menge steckt, so funktioniert es.

// edit...

Oracle ist ja mal so eine drecks tolle (*hust*) Datenbank. Das hier geht:
SQL-Code:
MERGE INTO "TdmUser" D
   USING (
      SELECT *
      FROM "TdmUser"
      WHERE "UserID" = 70
    OR "UserID" = -1) S
   
   ON (D."UserID" = S."UserID" AND D."UserID" <> -1)
   
   WHEN MATCHED THEN
      UPDATE SET D."Username" = 'update'
      
   WHEN NOT MATCHED THEN
      INSERT (D."Username", D."Disabled")
      VALUES ('inserta', 0);
Und das hier nicht:
SQL-Code:
MERGE INTO "TdmUser" D
   USING (
      SELECT *
      FROM "TdmUser"
      WHERE "Username" = 'test'
    OR "UserID" = -1) S
   
   ON (D."Username" = S."Username" AND D."UserID" <> -1)
   
   WHEN MATCHED THEN
      UPDATE SET D."Username" = 'update'
      
   WHEN NOT MATCHED THEN
      INSERT (D."Username", D."Disabled")
      VALUES ('inserta', 0);
Tja, und jetzt wird es sehr interessant: wo liegt der Unterschied?! Lediglich darin, dass das eine (UserID) ein NUMBER und das andere (Username) ein VARCHAR2-Feld ist. WTF?!
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)

Geändert von mkinzler (10. Jul 2010 um 18:39 Uhr) Grund: Code-Tag durch SQL-Tag ersetzt
  Mit Zitat antworten Zitat