MySQL - Error en CREATE FUNCTION

 
Vista:

Error en CREATE FUNCTION

Publicado por Frawol (2 intervenciones) el 23/02/2008 00:23:46
Buenas a todos,
Estoy intentando hacer una funcion y me da todo el rato error. La funcion es esta:

DROP FUNCTION IF EXISTS fn_SigId;
delimiter $
CREATE FUNCTION fn_SigId(Head VARCHAR(2)) RETURNS VARCHAR(10)
BEGIN
SELECT SigIDObra INTO @SigID FROM cfg;
SELECT CONCAT( RPAD(Head,10-CHAR_LENGTH(@SigID),0) ,@SigID);
END$
delimiter ;

Y me da el siguiente error. (Copio y Pego)

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'delimiter $
CREATE FUNCTION fn_SigId(Head VARCHAR(2),Campo VARCHAR(30)) RETURNS' at line 1

¿Sabe alguien que esta mal?

Un saludos a todos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Error en CREATE FUNCTION

Publicado por Gonzalo (4 intervenciones) el 23/02/2008 21:04:16
Hay dos errores:
1. No estás devolviendo un resultado único sino un conjunto, la resultante de un SELECT, lo que es incompatible con un FUNCTION. Esto es porque no estás almacenando el resultado del RPAD en la variable, sino que el parser lo interpreta como consulta.
2. No tienes la función RETURN el final, por lo que MySQL no pude saber qué devolver; .
Prueba:

DELIMITER $$

DROP FUNCTION IF EXISTS fn_SigId $$
CREATE FUNCTION fn_SigId(Head VARCHAR(2)) RETURNS VARCHAR(10)
BEGIN
SELECT SigIDObra INTO @SigID FROM cfg;
SELECT CONCAT(RPAD(Head,10-CHAR_LENGTH(@SigID),0) ,@SigID) INTO @SigID;
RETURN @SigID;
END $$

DELIMITER ;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error en CREATE FUNCTION

Publicado por frawol (2 intervenciones) el 28/02/2008 12:03:55
Gracias por la respuesta

lo del ultimo select no me di cuenta y deberia ser result. puse select para una pruebilla jejej.

Lo he probado y me sigue tirando error. He hecho un cambio pero me da el mismo error.

El codigo nuevo:

DELIMITER $$
CREATE FUNCTION fn_SigId(Head VARCHAR(2))
RETURNS VARCHAR(10)
BEGIN
SELECT SigIDObra INTO @SigID FROM cfg;
RETURN CONCAT(RPAD(Head,10-CHAR_LENGTH(@SigID),0) ,@SigID);
END $$
DELIMITER ;

El error:

DELIMITER $$ CREATE FUNCTION fn_SigId(

Head VARCHAR( 2 )
) RETURNS VARCHAR( 10 ) BEGIN SELECT SigIDObra
INTO @SigID
FROM cfg;


MySQL ha dicho:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $$
CREATE FUNCTION fn_SigId(Head VARCHAR(2))
RETURNS VARCHAR(10)' at line 1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error en CREATE FUNCTION

Publicado por Gonzalo G.C. (339 intervenciones) el 01/03/2008 16:50:45
Es posible, si la muesrta está bien escrita, que el problema se deba a que el DELIMITER $$ y el CREATE FUNCTION han quedado en la mísma línea, y eso es un error de sintáxis. MySQL no admite que haya más de una sentencia en la misma línea, porque en definitiva no es un lenguaje de programación sino de consultas y de interpretación de scripts, y por definición, cada línea de un script es una tarea a realizar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar