AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Problem mit MERGE Befehl
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit MERGE Befehl

Ein Thema von s.h.a.r.k · begonnen am 10. Jul 2010 · letzter Beitrag vom 12. Jul 2010
Antwort Antwort
Benutzerbild von s.h.a.r.k
s.h.a.r.k

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

Problem mit MERGE Befehl

  Alt 10. Jul 2010, 14:35
Datenbank: Oracle • Version: 9.x • Zugriff über: AnyDAC
Hallo zusammen,

ich versuche gerade folgende Query auszuführen und es klappt und klappt nicht ich habe echt keine Ahnung mehr wieso. Keine der Spalten sind in einer Art reservierte Wörter, alle Spalten sind gültig und vorhanden.
SQL-Code:
MERGE INTO "TdmUser" t1
  USING (
    SELECT "RefUserID"
    FROM "TdmUserLogin"
    WHERE "RefUserID" = -1
  ) t2
  
  ON (t1."UserID" = t2."RefUserID")
  
  WHEN MATCHED THEN
    UPDATE SET t1."UserID" = t2."RefUserID"

  WHEN NOT MATCHED THEN
    INSERT (t1."Username") VALUES ('Armin')
Das folgt als Resultat (hab die Zeilen des Querys durchnummeriert):
SQL-Code:
 Fehler beim Start in Zeile 1 in Befehl:
 1: MERGE INTO "TdmUser" t1
 2: USING (
 3: SELECT "RefUserID"
 4: FROM "TdmUserLogin"
 5: WHERE "RefUserID" = -1
 6: ) t2
 7:
 8: ON (t1."UserID" = t2."RefUserID")
 9: WHEN MATCHED THEN
10: UPDATE SET t1."UserID" = t2."RefUserID"
11: WHEN NOT MATCHED THEN
12: INSERT (t1."Username") VALUES ('Armin')
Fehler bei Befehlszeile:8 Spalte:6
Fehlerbericht:
SQL-Fehler: ORA-00904: Ungültiger Spaltenname
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Ich hab schon keine Ahnung was alles ausprobiert und komme einfach nicht auf eine funktionierende Lösung...
»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 19:38 Uhr) Grund: Code-Tag durch SQL-Tag ersetzt
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.655 Beiträge
 
Delphi 12 Athens
 
#2

AW: Problem mit MERGE Befehl

  Alt 10. Jul 2010, 14:46
Was passiert denn, wenn Du die Anführungszeichen weglässt?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

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

AW: Problem mit MERGE Befehl

  Alt 10. Jul 2010, 14:57
Das wird nicht funktionieren, da ich die Datenbank auch mit Anführungszeichen erstellt habe, da Oracle sonst aus allem Großbuchstaben macht -> sehr unschön, wie ich finde.

Hier aber noch eine Version, bei der es auch nicht klappt:
SQL-Code:
Fehler beim Start in Zeile 1 in Befehl:
 1: MERGE INTO testtable t1
 2:
 3: USING (
 4: SELECT *
 5: FROM table1
 6: WHERE foo = 'test'
 7: ) t2
 8:
 9: ON (t1.blub = t2.foo)
10:
11: WHEN MATCHED THEN
12: UPDATE SET t1.blub = 'update'
13:
14: WHEN NOT MATCHED THEN
15: INSERT (t1.blub) VALUES ('insert')
Fehler bei Befehlszeile:9 Spalte:6
Fehlerbericht:
SQL-Fehler: ORA-00904: Ungültiger Spaltenname
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
»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 19:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.655 Beiträge
 
Delphi 12 Athens
 
#4

AW: Problem mit MERGE Befehl

  Alt 10. Jul 2010, 15:05
Die Schreibweise ist aber korrekt? Ich habe mir gerade die Syntax noch einmal direkt bei Oracle angeschaut und kann auf den ersten Blick keinen Fehler entdecken. Übrigens finde ich es ausgesprochen dämlich suboptimal, Felder in Case-sensitiver Schreibweise anzulegen, da man sich somit bewusst eine unnötige Fehlerquelle einbaut.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

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

AW: Problem mit MERGE Befehl

  Alt 10. Jul 2010, 15:08
Warum die Groß- und Kleinschreibung: Wenn man in einem SQL-Tool aber die Tabellen anschaut kann man es wesentlich besser lesen, als ohne. Nachdem zudem nur ich das Tool programmiere handle ich mir somit eher weniger Probleme ein. Aber in gewisser Weise gebe ich dir da schon recht!

Ich habe gerade auch gesucht, ob man so einen Befehl für einen User sperren kann, nur habe ich bisher nichts gefunden. Zudem sollte dann ja eine andere Fehlermeldung erscheinen. Ich bin im Moment echt überfragt, da ich auch die Query schon zig mal kontrolliert habe. Ebenso habe ich so ziemlich alles mit den reserved Words abgeglichen.

Mich das gerade ziemlich an, da es einfach nicht weiter geht...
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.655 Beiträge
 
Delphi 12 Athens
 
#6

AW: Problem mit MERGE Befehl

  Alt 10. Jul 2010, 15:13
Man kann bei der Abfrage aber auch Aliase vergeben, die sogar Leerzeichen enthalten dürfen, so dass die Lesbarkeit in diesem Zusammenhang kein gewichtiges Argument ist. Mehr als diesen Tipp zu Deinem Problem konnte ich auf die Schnelle übrigens auch nicht finden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz