PHP rocks! wünscht allen Mitgliedern einen guten Rutsch ins neue Jahr 2017 !!!
Hinweis: Das Forum zieht um! Um keine Datenverluste zu haben, schalten wir zwecks Übernahme der Daten das Forum am Sonntag, den 24.04.2016 um ca. 21:00 Uhr offline und passen anschliessend die DNS-Einträge an.
www.php-rocks.de wird euch dann nach den Aktualisierungen der DNS-Server wieder wie gewohnt uneingeschränkt zur Verfügung stehen.
Danke für euer Verständnis!

Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Prozedur ignoriert scheinbar Parameter?
#1
Hallo,

Ich habe eine Prozedur, die ganz einfach nur Werte aus mehreren Tabellen entfernen soll:
Code:
CREATE PROCEDURE deleteBatch ( id INT )
BEGIN
   DELETE FROM `table1` where `id` = id;
   DELETE FROM `table2` where `id` = id;
   DELETE FROM `table3` where `id` = id;
   DELETE FROM `table4` where `id` = id;
END
Aufruf der Prozedur für id=5:
Code:
CALL deleteBatch( 5 )
Als Resultat dessen entfernt er mir aber grundsätzlich alle Datensätze in den Tabellen, ungeachtet der id, die ich explizit mitgebe.

Habe ich einen Denkfehler?
Danke
Antworten
#2
Hallo, Problem gefunden.

Ich persönlich halte das zwar für einen Bug, aber wenn man es weiß, kann man damit umgehen.
Das grundsätzliche Problem war, dass ich auf die Tabellennamen verzichtet habe, die Procedure muss so aussehen:
Code:
CREATE PROCEDURE deleteBatch ( id INT )
BEGIN
   DELETE FROM `table1` where `table1`.`id` = id;
   DELETE FROM `table2` where `table2`.`id` = id;
   DELETE FROM `table3` where `table3`.`id` = id;
   DELETE FROM `table4` where `table4`.`id` = id;
END
Ob es evtl. auch damit zusammen hängen mag, dass der Spaltenname gleich dem Parameterbezeichner ist, habe ich jetzt nicht getestet.
Ich finde das Verhalten grundsätzlich nur falsch, so schlau sollte selbst MySQL sein, denn führe ich die DELETEs direkt aus, wird Zeile für Zeile korrekt abgearbeitet, auch ohne Tabellenangabe in der WHERE-Klausel.

Es hat also was mit den PROCEDUREs zu tun.

Jedenfalls läuft es jetzt.
Gruß Arne
Antworten


Gehe zu: