Fehler im Script

Advantage Database Server

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21304
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 226 Mal
Danksagung erhalten: 73 Mal

Fehler im Script

Beitrag von Manfred »

was ist an dem Befehl falsch?

Code: Alles auswählen

BEGIN TRANSACTION;
    MERGE mandanten ON kundennummer = 4296106
    WHEN NOT matched THEN INSERT 
    (id,
     gebdat,
     idgeschlecht,
     idschule,
     klasse,
     name,
     vorname,
     ort,
     plz,
     strasse,
     telefon,
     mobil,
     mail,
     kundennummer,
     abbuchungsdatumab,
     abbuchungsdatumbis,
     kontoinhaber,
     haltestellennrziel,
     iban,
     latitude,
     longitude)
    VALUES('79a29110-981e-418e-a134-350db780014e',
           '',
           '',
           '114                                 ',
           '',
           '',
           '',
           '',
           '',
           '',
           '',
           '',
           '',
           0,
           '',
           '',
           '',
           'de:05570:14707',
           '',
           '',
           '');
    INSERT INTO ticketlaufzeit
    (gueltigab,gueltigbis,preis,ticketartbez,ticketartdrucktext,idmandant,eavcode,preisstufedrucktext,druckformular,netz, produktnummer,origin,api)
    VALUES('2024-08-01',
	       '2025-07-31',
		   '49',
		   '',
		   '',
		   '79a29110-981e-418e-a134-350db780014e',
		   '',
		   '',
		   '',
		   '',
		   '',
		   '9',
		   FALSE)
		   
    WHEN MATCHED THEN
	UPDATE SET gebdat = '',
        idgeschlecht = '',
        idschule ='114                                 ',
        klasse  = '',
        name  = '',
        vorname  = '',
        ort  = '',
        plz  = '',
        strasse  = ',
        telefon  = '',
        mobil  = '',
        mail  = '',
        kundennummer  = 0,
        abbuchungsdatumab  = '', 
        abbuchungsdatumbis  = '',
        kontoinhaber  = '',
        haltestellennrziel  = 'de:05570:14707',
        iban = ' ',
        latitude = ' ',
        longitude = ' ';
COMMIT WORK
Der Architect wirft
poQuery: Error 7200: AQE Error: State = 42000; NativeError = 2117; [SAP][Advantage SQL Engine]Unexpected token: WHEN -- Expecting semicolon. -- Location of error in the SQL statement is: 1408 (line: 62 column: 5)
das aus. Jetzt bitte nicht die Werte anmeckern, die habe ich entfernt wegen Datenschutz....
Einzeln klappt alles nur sobald ich matched und not matched zussammen benutze klappt es nicht.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9447
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 374 Mal
Kontaktdaten:

Re: Fehler im Script

Beitrag von Tom »

Bei UPDATE fehlen die Anführungszeichen, und dann sind da noch andere Sachen. Das hier ist die Korrektur, die ChatGPT vorschlägt:

Code: Alles auswählen

BEGIN TRANSACTION;

MERGE INTO mandanten AS m
USING (SELECT 4296106 AS kundennummer) AS a
ON m.kundennummer = a.kundennummer
WHEN NOT MATCHED THEN
    INSERT (id, gebdat, idgeschlecht, idschule, klasse, name, vorname, ort, plz, strasse, telefon, mobil, mail, kundennummer, abbuchungsdatumab, abbuchungsdatumbis, kontoinhaber, haltestellennrziel, iban, latitude, longitude)
    VALUES('79a29110-981e-418e-a134-350db780014e', '', '', '114', '', '', '', '', '', '', '', '', '', 0, '', '', '', 'de:05570:14707', '', '', '')
WHEN MATCHED THEN
    UPDATE SET gebdat = '',
               idgeschlecht = '',
               idschule ='114',
               klasse  = '',
               name  = '',
               vorname  = '',
               ort  = '',
               plz  = '',
               strasse  = '',
               telefon  = '',
               mobil  = '',
               mail  = '',
               kundennummer  = 0,
               abbuchungsdatumab  = '', 
               abbuchungsdatumbis  = '',
               kontoinhaber  = '',
               haltestellennrziel  = 'de:05570:14707',
               iban = '',
               latitude = '',
               longitude = '';

INSERT INTO ticketlaufzeit
    (gueltigab, gueltigbis, preis, ticketartbez, ticketartdrucktext, idmandant, eavcode, preisstufedrucktext, druckformular, netz, produktnummer, origin, api)
VALUES('2024-08-01', '2025-07-31', '49', '', '', '79a29110-981e-418e-a134-350db780014e', '', '', '', '', '', '9', FALSE);

COMMIT WORK;
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21304
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 226 Mal
Danksagung erhalten: 73 Mal

Re: Fehler im Script

Beitrag von Manfred »

das muß mir wohl gerade beim reinkiopieren passiert sein. Im Original sind die Anführungszeichen drin. ich sagte ja, einzeln klappt alles
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 674
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 4 Mal
Danksagung erhalten: 108 Mal
Kontaktdaten:

Re: Fehler im Script

Beitrag von nightcrawler »

was steht denn genau in (line: 62 column: 5)
edit: warum steht denn mittem im Befehl ein insert into .... und danch das "when matched..."?
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21304
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 226 Mal
Danksagung erhalten: 73 Mal

Re: Fehler im Script

Beitrag von Manfred »

da fängt WHEN MATCHED THEN an
ich hatte vorher ein Semikolon drin, war aber auch falsch.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 674
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 4 Mal
Danksagung erhalten: 108 Mal
Kontaktdaten:

Re: Fehler im Script

Beitrag von nightcrawler »

Du hast immer noch mittendrin ein insert into, welches definitv falsch ist.

TIPP:
fang langsam an ... erst ein Feld, dann zwei Felder....solange, bis es knallt oder vollständig ist.

Code: Alles auswählen

    MERGE mandanten ON kundennummer = 4296106
    WHEN NOT matched THEN INSERT 
      (id)
    VALUES 
      ('79a29110-981e-418e-a134-350db780014e')
    WHEN MATCHED THEN
	UPDATE SET gebdat = '';
übrigens macht das ganze keinen Sinn, da die Kundennummer im matched Fall auf 0 zurückgesetzt wird und beim not matched keine Verwendung findet.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21304
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 226 Mal
Danksagung erhalten: 73 Mal

Re: Fehler im Script

Beitrag von Manfred »

OK,
ich möchte einen Mandanten anlegen und eine Laufzeit.
Das in Transaction, weil es nur zusammen erfolgen darf.
Das klappt. Jetzt möchte ich aber haben, das nur ein Mandant angelegt wird, wenn die Kundennummer noch nicht vorhanden ist. Wenn der Mandant/die Kundennummer vorhanden ist, dann soll der Mandant nur upgedatet werden und es wird keine Laufzeit benötigt. (die sollte ja schon vorhanden sein.
Und das dachte müßte so klappen. Tut es das nicht? Warum nicht?
Oder muß es anders gelöst werden?
Ach so, ich habe es Schritt für Schritt gemacht, das Insert für das Ticket hatte ich auch schon weggelassen. Dann klappt es wohl. Aber das benötige ich auf jeden Fall.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 674
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 4 Mal
Danksagung erhalten: 108 Mal
Kontaktdaten:

Re: Fehler im Script

Beitrag von nightcrawler »

Manfred hat geschrieben: Mo, 26. Aug 2024 15:02 Ach so, ich habe es Schritt für Schritt gemacht, das Insert für das Ticket hatte ich auch schon weggelassen. Dann klappt es wohl. Aber das benötige ich auf jeden Fall.
Das geht so nicht, dann musst Du es in einen Trigger packen. Oder statt des Merge ein komplettes Script schreiben.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21304
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 226 Mal
Danksagung erhalten: 73 Mal

Re: Fehler im Script

Beitrag von Manfred »

erziele ich denn dann damit genau den Effekt, den ich benötige?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21304
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 226 Mal
Danksagung erhalten: 73 Mal

Re: Fehler im Script

Beitrag von Manfred »

Schade, das wäre jetzt sicherlich die Antwort gewesen, die mir weitergeholfen hätte...
Ich habe nämlich keinen Plan, wie man das umsetzen müßte.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 674
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 4 Mal
Danksagung erhalten: 108 Mal
Kontaktdaten:

Re: Fehler im Script

Beitrag von nightcrawler »

komplettes script:

Code: Alles auswählen

BEGIN TRANSACTION;
if exists(select top 1 * from mandanten where kundennummer = 4296106) then
  insert into mandanten(kundennummer, id, ....) VALUES(4296106, '79a29110-981e-418e-a134-350db780014e', ...);
  insert into ticketlaufzeit(gueltigab...) VALUES('2024-08-01', ...);
end else
  update mandanten set gebdat = '', ....
    where kundennummer= 4296106;
end;
COMMIT WORK
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21304
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 226 Mal
Danksagung erhalten: 73 Mal

Re: Fehler im Script

Beitrag von Manfred »

verdammt, da wäre ich jetzt nicht drauf gekommen. Aber jetzt wo ich es sehe, sieht es sehr plausibel aus und ich hätte drauf kommen müssen. Danke
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21304
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 226 Mal
Danksagung erhalten: 73 Mal

Re: Fehler im Script

Beitrag von Manfred »

noch ne Frage, wie löst man sowas über Trigger? Da habe ich auch noch keine Ahnung von und deshalb auch bisher nie genutzt. Wäre aber mal interessant generell zu wissen wie man das damit macht.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Antworten