AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Problem mit Merge unter FB 3
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Merge unter FB 3

Ein Thema von stalkingwolf · begonnen am 16. Jan 2023 · letzter Beitrag vom 20. Jan 2023
Antwort Antwort
Seite 1 von 2  1 2      
stalkingwolf

Registriert seit: 6. Mai 2011
543 Beiträge
 
#1

Problem mit Merge unter FB 3

  Alt 16. Jan 2023, 09:47
Datenbank: Firebird • Version: 3 • Zugriff über: flamerobin
Moin,

ich wollte mit Merge aus einer Tabelle in eine andere schreiben.
Das funktioniert auch mit 2.5.* aber unter Firebird 3. erhalte ich eine Meldung
Code:
Invalid insert or update value(s): object columns are constrained - no 2 table rows can have duplicate column values
und danach den Violation of Primary Key vom Hauptschlüssel

lt Netz soll ein gbak das Problem lösen, aber das macht es nicht. Sobald ein Datensatz doppelt vorhanden ist, knallt es. und genau dafür soll das MERGE mit with not matching ja da sein.

Jemand schon einmal in das Problem gelaufen und weiß wie man das löst?
  Mit Zitat antworten Zitat
lxo

Registriert seit: 30. Nov 2017
288 Beiträge
 
Delphi 12 Athens
 
#2

AW: Problem mit Merge unter FB 3

  Alt 16. Jan 2023, 09:57
Wie sieht denn dein Merge-Statement aus?
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
543 Beiträge
 
#3

AW: Problem mit Merge unter FB 3

  Alt 16. Jan 2023, 10:23
Code:
merge into KUNDENSTAMM a
using ( select KDNR,NAME,VORNAME,STRASSE,ORT,PLZ,TELEFON,EMAIL from AUFTRAG
   where coalesce(b.KDNR,'') <> ''
   group by KDNR,NAME,VORNAME,STRASSE,ORT,PLZ,TELEFON,EMAIL
      ) b
on (coalesce(rtrim(a.KDNR),'') = coalesce(rtrim(b.KDNR),''))
when not matched then insert (a.KDNR,a.NAME,a.VORNAME,a.STRASSE,a.ORT,a.PLZ,a.TELEFON,a.EMAIL) values (b.KDNR,b.NAME,b.VORNAME,b.STRASSE,b.ORT,b.PLZ,b.TELEFON,b.EMAIL);
das ist etwas vereinfacht, weil es sind mehr Felder.
KDNR ist das Haupffeld in KUNDENSTAMM und kann in AUFTRAG mehrfach vorhanden sein.

Gleiche Tabelle mit gleichem Inhalt in FB 2.5.* funktioniert und in 3.* nicht.
  Mit Zitat antworten Zitat
lxo

Registriert seit: 30. Nov 2017
288 Beiträge
 
Delphi 12 Athens
 
#4

AW: Problem mit Merge unter FB 3

  Alt 16. Jan 2023, 11:26
Hast du mal probiert bei der Datenmenge die du in USING verwendest (Quelltabelle) nach dem Primarykey zu sortieren aus deiner Zieltabelle?
Also in dem Fall nach KUNDENNR?
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Problem mit Merge unter FB 3

  Alt 16. Jan 2023, 11:30
Code:

when not matched then insert (a.KDNR,a.NAME,a.VORNAME,a.STRASSE,a.ORT,a.PLZ,a.TELEFON,a.EMAIL) values (b.KDNR,b.NAME,b.VORNAME,b.STRASSE,b.ORT,b.PLZ,b.TELEFON,b.EMAIL);
Hast du tatsächlich den Alias "a." mit in der Feldliste beim Insert?

Frank
Frank Reim
  Mit Zitat antworten Zitat
lxo

Registriert seit: 30. Nov 2017
288 Beiträge
 
Delphi 12 Athens
 
#6

AW: Problem mit Merge unter FB 3

  Alt 16. Jan 2023, 11:33
Welche Firbird 3 Version benutzt du?
Da gab es wohl auch Probleme mit MERGE, wurde in der Version 3.0.6 behoben.

Siehe:
https://firebirdsql.org/file/documen...nfb30-bug.html
https://github.com/FirebirdSQL/firebird/issues/6522
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
543 Beiträge
 
#7

AW: Problem mit Merge unter FB 3

  Alt 16. Jan 2023, 15:17
Code:

when not matched then insert (a.KDNR,a.NAME,a.VORNAME,a.STRASSE,a.ORT,a.PLZ,a.TELEFON,a.EMAIL) values (b.KDNR,b.NAME,b.VORNAME,b.STRASSE,b.ORT,b.PLZ,b.TELEFON,b.EMAIL);
Hast du tatsächlich den Alias "a." mit in der Feldliste beim Insert?

Frank
ne das war nur damit man es hier besser erkennt. Es ging mir um die Syntax. Relativ simple und funktioniert auch in der 2er Version.
bei dem Kunden haben wir die 3.0.9. Der Fehler liest sich anders. Dort crashed der gesamte SQL Server.

Hast du mal probiert bei der Datenmenge die du in USING verwendest (Quelltabelle) nach dem Primarykey zu sortieren aus deiner Zieltabelle?
Also in dem Fall nach KUNDENNR?
Leider nichts gebracht.


Wenn ich das Ding kürze auf das notwendigste geht es immer noch nicht.
Beide Felder varchar 15.
IMO funktioniert not matched nicht.
Code:
merge into KUNDENSTAMM as a
using AUFTRAG as b
on a.KDNR = b.KDNR
when not matched then insert (KDNR) values (b.KDNR);

Geändert von stalkingwolf (16. Jan 2023 um 15:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Problem mit Merge unter FB 3

  Alt 16. Jan 2023, 17:25

Sobald ein Datensatz doppelt vorhanden ist, knallt es. und genau dafür soll das MERGE mit with not matching ja da sein.
Wo sind doppelte Daten? Auftrag oder Kundenstamm?
KUNR in Kundenstamm ist Primary Key?

Ich habe in einer Test DB das mal nachgestellt. (FB 3.0.10)
Alle Varianten funktioniert es ohne Murren.
So funktioniert es, Wenn ich AUFTRAG nicht gruppiere (also in der Quelle doppelte KUNR' s habe)
als auch wenn ich in der Zieltabelle mehrere Datensätze mit gleicher KUNR habe.

Die beim Kunden installierte und verwendete fbclient.dll passt exakt zur Server - Version?
Miniaturansicht angehängter Grafiken
fb3-merge.png  
Frank Reim

Geändert von dataspider (16. Jan 2023 um 17:34 Uhr)
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
543 Beiträge
 
#9

AW: Problem mit Merge unter FB 3

  Alt 16. Jan 2023, 17:36

Sobald ein Datensatz doppelt vorhanden ist, knallt es. und genau dafür soll das MERGE mit with not matching ja da sein.
Wo sind doppelte Daten? Auftrag oder Kundenstamm?
KUNR in Kundenstamm ist Primary Key?

Ich habe in einer Test DB das mal nachgestellt. (FB 3.0.10)
Alle Varianten funktioniert es ohne Murren.
So funktioniert es, Wenn ich AUFTRAG nicht gruppiere (also in der Quelle doppelte KUNR' s habe)
als auch wenn ich in der Zieltabelle mehrere Datensätze mit gleicher KUNR habe.

Die beim Kunden installierte und verwendete fbclient.dll passt exakt zur Server - Version?
Ja die passt. Wir machen morgen bei uns einmal ein Update. Weil ich habe das hier mit 3.0.9 auch. Andere Kundendatenbanken mit 2.5.1

KDNR ist in Kundenstamm Primary Korrekt. Kann aber in AUFTRAG mehrfach vorkommen. Dafür ist not matching ja gedacht.
Und wie gesagt funktioniert auch in anderen, viel größeren, Datenbanken mit 2.5.1 ohne Problem.
Und jede Datenbank welche mit 2.5.1 funktioniert wir mit gbak nach 3.0.9 rüber ziehen und es dort den MERGE starten gibt es das Problem.

Ich berichte morgen um es was gebracht hat. Weil sonst habe ich ein Problem update or insert aus select will Firebird ja nicht implementieren und verweist auf MERGE.
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
543 Beiträge
 
#10

AW: Problem mit Merge unter FB 3

  Alt 17. Jan 2023, 12:19
auch mit der 3.0.10 funktioniert es nicht.

Ich habe mir nun die Tabelle AUFTRAG aus 3.0.10 per copy as insert mit Flamerobin rausgezogen. In eine Datenbank welche noch mit 2.5.* läuft eingespielt.
Dort läuft der Merge. Habe mir dann aus KUNDEN das wieder per copy as insert rausgezogen und in die 3.0.10 eingespielt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz