2010-08-04 13 views
5

Jestem nowy w używaniu procedur i nie mogę sprawić, że moje działa. Używam MySQL v5.1.36 i wprowadzam mój kod za pomocą MySQL Console na serwerze WAMPP. Jeśli przejdę do (ponownego) utworzenia procedury. Pojawia się błąd nr 1304 (42000).Błąd z procedurami mysql ERROR 1304 i 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 ; 

Jednak jeśli spróbuję skorzystać z procedury, otrzymuję błąd nr 1305 (42000).

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

Jeśli procedura istnieje dla jednego, jak nie może istnieć dla drugiej? Co ja robię źle.

Odpowiedz

3

wierzę problemy są

  1. Pierwszy błąd występuje, ponieważ próbujesz odtworzyć istniejącą procedurę. Jeśli najpierw upuścisz tę procedurę, nie dostaniesz tego błędu,
  2. Drugi błąd jest taki, że PROCEDURY wywoływane są za pomocą instrukcji CALL, a FUNCTIONs są wywoływane jako referencje funkcji, tak jak w kodzie. Musisz zdefiniować FUNKCJĘ, a nie PROCEDURĘ. The (MySQL documentation) mówi:

CREATE FUNCTION jest również stosowane w MySQL wspierać UDF (funkcje zdefiniowane przez użytkownika). Patrz rozdział 21.2, "Dodawanie nowych funkcji do MySQL". UDF można uważać za zewnętrzną funkcję zapisaną w pamięci. Przechowywane funkcje udostępniaj ich przestrzeń nazw za pomocą funkcji UDF. W sekcji 8.2.3, "Analiza nazw funkcji pod nazwą i rozdzielczością", patrz opis reguł , opisujący sposób interpretowania przez serwer odwołań do różnych rodzajów funkcji . Aby uzyskać wywołanie procedury składowanej, należy użyć instrukcji CALL o nazwie (sekcja 12.2.1, "Składnia wywołania"). Aby wywołać zapisaną funkcję , odwołaj się do niej w wyrażeniu . Funkcja zwraca wartość podczas oceny wyrażenia.

+0

Dziękujemy! To takie oczywiste, ale nie mogłem tego pominąć, ponieważ byłem przekonany, że wykonuję SP, podobnie jak SQL Server. :-) – CobaltBlue

Powiązane problemy