Name ist ein reserviertes wort. das solltest du nicht als spaltenname verwenden.
Dann musst du noch ein THEN nach IF EXISTS( ... ) ergänzen, das gleiche weiter unter nach dem while, allerdings ein DO. was die schleife machen soll kann ich nicht ganz erahnen, sieht total schwachsinnig aus. wenn du eine einzigartige ID brauchst - dann mach doch einfach ne spalte mit nem unique key?
RETURN; darfst du in procedures nicht benutzen, eine procedure 'returned' ja nichts. select -1 hört sich auch merkwürdig an. ein IF hat auch keinen begin .. end block, nach dem if-statement kommen die anweisungen, dann ggf. ein else und am schluss "END IF;".
und je nach dem welche db-engine du benutzt und wie du 'pID' speicherst ist der wert zu groß, 2147483647 aka 2^31-1 ist schon das maximum für einen signed integer.
und ich könnte so noch drei-vier seiten lang weiter machen, mach ich aber nicht:
Achja, und besorg dir einen mysql-standalone client mit query editor. dann siehst du auch was mysql alles nicht an deiner query passt. z.b.