2010-08-04 2 views
5

Я новичок в использовании процедур и, похоже, не могу работать с моими работами. Я использую MySQL v5.1.36 и вводя свой код с помощью консоли MySQL на сервере WAMPP. Если я перейду к (повторной) процедуре создания. Я получаю ошибку # 1304 (42000).Ошибка при процедурах mysql 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 ; 

Однако, если я попытаюсь использовать процедуру, я получаю ошибку # 1305 (42000).

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

Если процедура существует для одного, как она не может существовать для другого? Что я делаю не так.

ответ

3

Я считаю, что проблемы

  1. Первая ошибка происходит потому, что вы пытаетесь воссоздать существующую процедуру. Если вы сначала должны отказаться от процедуры, вы не получите эту ошибку,
  2. Вторая ошибка заключается в том, что ПРОЦЕДУРЫ вызывается с помощью инструкций CALL, а функции FUNCTION вызывается как ссылки функций, как в вашем коде. Вы должны определить FUNCTION, а не ПРОЦЕДУРА. (MySQL documentation) говорит:

CREATE FUNCTION оператор также используется в MySQL для поддержки UDFs (определяемые пользователем функции). См. Раздел 21.2, «Добавление новых функций в MySQL». UDF можно рассматривать как внешнюю сохраненную функцию. Сохраненные функции делят свое пространство имен с UDF. См. Раздел 8.2.3, «Обозначение имени функции и разрешение», для правил , описывающих, как сервер интерпретирует ссылки на различные виды функций .

Чтобы вызвать хранимую процедуру, используйте инструкцию CALL (см. Раздел 12.2.1, «Синтаксис вызова»). Чтобы вызвать сохраненную функцию , обратитесь к ней в выражении . Функция возвращает значение во время оценки выражения.

+0

Спасибо! Это так очевидно, но я не мог пройти мимо него, потому что был убежден, что я исполнял SP, как и SQL Server. :-) – CobaltBlue