sql >> Databasteknik >  >> RDS >> Mysql

mysql-avgränsningsfel

Jag skulle ta bort semikolonet efter END .

    ...
END
|
DELIMITER ;

Om din kommentar kan du inte använda den nuvarande avgränsaren när du deklarerar en ny avgränsare. Det låter förvirrande, men överväg om du gör så här:

DELIMITER |;

Nu skulle MySQL tro att avgränsaren är "|;" (två tecken, en pipa och ett semikolon). Om du tänker efter, DELIMITER måste behandlas på ett speciellt sätt av MySQL-klienten. Det är det enda påståendet som inte kan följs av den aktuella avgränsaren.

Så när du ställer in avgränsaren till pipe, gör du så här:

DELIMITER |

När du ställer tillbaka den till semikolon, gör så här:

DELIMITER ;

FWIW, jag körde följande utan fel på min lokala testdatabas på MySQL 5.0.75:

DROP FUNCTION IF EXISTS PersonName;
DELIMITER |

CREATE FUNCTION PersonName( personID SMALLINT )
RETURNS CHAR(20)
BEGIN
  DECLARE pname CHAR(20) DEFAULT '';
  SELECT name INTO pname FROM family WHERE ID=personID;
  RETURN pname;
END
|
DELIMITER ;


  1. Finns det något sätt att se en förberedd fråga eftersom den kommer att köras i databasen?

  2. Kan du lösa denna enkla SQL-fråga?

  3. Hur man skapar SQL-spår för att fånga SQL Server-händelser

  4. mysql främmande nyckelfel #1452