2010-08-04 4 views
5

Ich bin neu bei der Verwendung von Prozeduren und kann nicht funktionieren. Ich verwende MySQL v5.1.36 und gebe meinen Code mit MySQL Console auf einem WAMPP-Server ein. Wenn ich das Verfahren (neu) erstelle. Ich erhalte den Fehler # 1304 (42000).Fehler mit mysql-Prozeduren ERROR 1304 & ERROR 1305

mysql> DELIMITER // 
mysql> 
mysql> CREATE PROCEDURE modx.getCRID (IN x VARCHAR(255),OUT y INT) 
    -> BEGIN 
    ->   DECLARE y INT; 
    ->   SELECT id INTO y 
    ->   FROM `modx`.coverage_region 
    ->   WHERE `coverage_region`.name = x; 
    -> END// 
ERROR 1304 (42000): PROCEDURE getCRID already exists 
mysql> 
mysql> DELIMITER ; 

Wenn ich jedoch versuche, die Prozedur zu verwenden, erhalte ich Fehler # 1305 (42000).

mysql> USE modx; 
Database changed 
mysql> SET @crID = modx.getCRID("South East"); 
ERROR 1305 (42000): FUNCTION modx.getCRID does not exist 

Wenn das Verfahren für eins existiert, wie kann es für das andere nicht existieren? Was mache ich falsch.

Antwort

3

glaube ich, die Probleme

  1. Der erste Fehler tritt auf, da sind Sie ein vorhandenes Verfahren neu zu erstellen versuchen. Wenn Sie die Prozedur zuerst ablegen würden, würden Sie diesen Fehler nicht erhalten,
  2. Der zweite Fehler ist, weil Prozeduren mit CALL-Anweisungen aufgerufen werden, während FUNCTIONS als Funktionsreferenzen wie in Ihrem Code aufgerufen werden. Sie müssen eine FUNKTION, nicht ein PROCEDURE definieren. Die (MySQL documentation) sagt:

Die CREATE FUNCTION-Anweisung ist auch in MySQL verwendet benutzerdefinierte Funktionen zur Unterstützung (benutzerdefinierte Funktionen). Siehe Abschnitt 21.2, "Hinzufügen neuer Funktionen zu MySQL". Eine UDF kann als externe gespeicherte Funktion betrachtet werden. Gespeicherte Funktionen teilen ihren Namensraum mit UDFs. Siehe Abschnitt 8.2.3, "Funktion Name Parsing und Auflösung", für die Regeln beschreibt, wie der Server Referenzen auf verschiedene Arten von Funktionen interpretiert. Um eine gespeicherte Prozedur aufzurufen, verwenden Sie die CALL-Anweisung (siehe Abschnitt 12.2.1, "CALL-Syntax"). Um eine gespeicherte -Funktion aufzurufen, siehe in einem Ausdruck Ausdruck. Die Funktion gibt einen Wert während der Ausdrucksauswertung zurück.

+0

Vielen Dank! Es ist so offensichtlich, aber ich kam nicht darüber hinweg, weil ich überzeugt war, dass ich einen SP ausführte, genau wie SQL Server. :-) – CobaltBlue