Entwickler-Ecke

Datenbanken - Script in MySql schreiben


UliTs - Do 26.09.19 12:07
Titel: Script in MySql schreiben
Hallo allerseits,

ich bin unter extremen Zeitdruck und scheitere gerade an einem MySql-Script.
Ich möchte mit TFDQuery ein Script ausführen. Vermutlich liegt aber der Fehler bereits im Script:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
start transaction;
insert into Datei1
  (Name,Vorname)
values
  ('Testmann','Uli');

set @PersonenId = (select Last_Insert_Id());

if @PersonenId <> 0 then
  insert into Datei2
    (PersonenId,Id2)
  values
    (@PersonenId,102);
end if;

set @SpStRId = (select Last_Insert_Id());

if @PersonenId<>0 and @SpStRId<>0 then
  commit;
else
  rollback;
end if;

select @PersonenId PersonenId, @SpStRId SpStRId;


Bereits bei der ersten if-Abfrage kommt es zu einem Fehler #1064

Woran kann das liegen?


UliTs - Do 26.09.19 12:14

Wenn ich die if-Abfragen weglasse, funktioniert es.
Also muss irgendetwas an der Syntax falsch sein. Nur was?


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
start transaction;
insert into Datei1
  (Name,Vorname)
values
  ('Testmann','Uli');

set @PersonenId = (select Last_Insert_Id());

/*if @PersonenId <> 0 then*/
  insert into Datei2
    (PersonenId,Id2)
  values
    (@PersonenId,102);
/*end if;*/

set @SpStRId = (select Last_Insert_Id());

/*if @PersonenId<>0 and @SpStRId<>0 then*/
  commit;
/*else
  rollback;
end if;*/

select @PersonenId PersonenId, @SpStRId SpStRId;


jasocul - Do 26.09.19 13:21

Ich bin zwar kein mySQL-Experte, aber die Syntax sieht prinzipiell korrekt aus.
Welchen Wert hat @PersonenId denn? Falls das Null ist, kann mySQL das vielleicht nicht umsetzen und der Vergleich mit 0 führt zu einem Syntax-Fehler.


Nersgatt - Do 26.09.19 13:29

Bin mir nicht sicher. Versuch mal, die Bedingung zu klammern:


SQL-Anweisung
1:
2:
3:
4:
5:
6:
if (@PersonenId <> 0then
  insert into Datei2
    (PersonenId,Id2)
  values
    (@PersonenId,102);
end if;


Ralf Jansen - Do 26.09.19 16:12

Das letzte mal als ich mir mysql angeschaut habe war "if" mitten in einem beliebigen Script nicht erlaubt. Entweder es ist Teil eines SQL Statements oder Teil eines Codeblocks in einer Stored Procedures, Trigger etc. aber nicht einfach so in einem Script.


UliTs - Fr 27.09.19 13:54

Vielen Dank für die Antworten.

Ich vermute, dass Ralf Recht hat und "if" in einem beliebigen Script nicht erlaubt ist :-( .

Ich denke, die einzige Lösung wird dann eine Stored Procedure sein.