2010-08-04 288 views
5

Soy nuevo en el uso de procedimientos y parece que no funciona bien. Estoy usando MySQL v5.1.36 y estoy ingresando mi código usando MySQL Console en un servidor WAMPP. Si voy a (re) crear el procedimiento. Obtengo el error # 1304 (42000).Error con los procedimientos de mysql ERROR 1304 y 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 ; 

Sin embargo, si trato de utilizar el procedimiento obtengo el error # 1305 (42000).

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

Si el procedimiento existe para uno, ¿cómo puede no existir para el otro? Qué estoy haciendo mal.

Respuesta

3

Creo que los problemas son

  1. El primer error se produce porque está intentando volver a crear un procedimiento existente. Si soltara el procedimiento primero, no obtendría este error,
  2. El segundo error se debe a que los PROCEDIMIENTOS se invocan con instrucciones CALL, mientras que las FUNCIONES se invocan como referencias de función, como en su código. Debe definir una FUNCIÓN, no un PROCEDIMIENTO. El (MySQL documentation) dice:

la sentencia CREATE FUNCTION es también usado en MySQL para apoyar las UDF (funciones definidas por el usuario). Vea la Sección 21.2, "Agregar nuevas funciones a MySQL". Una UDF se puede considerar como una función almacenada externa . Las funciones almacenadas comparten su espacio de nombres con UDF. Ver Sección 8.2.3, “Nombre de la función de análisis y resolución de ”, por las reglas que describen cómo el servidor interpreta referencias a diferentes tipos de funciones.

para invocar un procedimiento almacenado, utilice la instrucción llamada (consulte la Sección 12.2.1, “CALL sintaxis”). Para invocar una función almacenada , consulte en una expresión . La función devuelve un valor de durante la evaluación de la expresión.

+0

¡Gracias! Es muy obvio, pero no pude superarlo porque estaba convencido de que estaba ejecutando un SP, al igual que SQL Server. :-) – CobaltBlue

Cuestiones relacionadas