MySQL - Error Procedimiento Almacenado MySQL

 
Vista:

Error Procedimiento Almacenado MySQL

Publicado por Abrahan (1 intervención) el 08/05/2009 21:53:49
DELIMITER //
CREATE PROCEDURE registrarPE(
IN nombre CHAR(100),
IN telefono INTEGER(11),
IN pdni INTEGER(11),
IN email VARCHAR(100),
IN fechan DATE,
IN sexo CHAR(1),
IN profesion VARCHAR(100),
IN pais VARCHAR(100),
IN provincia VARCHAR(100),
IN localidad VARCHAR(100),
IN tried BINARY,
IN idpromocion INTEGER(11),
IN fechareg DATE,
IN IP CHAR(15)
)
BEGIN
DECLARE iduser INTEGER(11);
DECLARE lastid INTEGER(11);
select @iduser=IdParticipante from `participante` where DNI=pdni;
IF (NOT EXISTS(SELECT p.IdParticipante FROM `participante` AS p,`parpro` AS pp,`promocion` AS pr WHERE p.IdParticipante=@iduser AND pp.IdParticipante=@iduser AND pr.IdPromocion=pp.IdPromocion)) THEN
BEGIN
INSERT INTO participante(Nombre,Telefono,DNI,Email,FechaNac,Sexo,Profesion,Pais,Provincia,Localidad,IsTried) values(nombre,telefono,pdni,email,fechan,sexo,profesion,pais,provincia,localidad,tried);
set @lastid=LAST_INSERT_ID();
insert into `parpro` values(@lastid,idpromocion,fechareg,IP);
END
END
//
DELIMITER ;

Hola a todos tengo este procedimiento almacenado, pero me da error en la linea 27 (END // DELIMITER ;) alguien me puede ayudar porfavor, donde esta el error, creo q es en los delimitadores alguie me ayuda...porfis....

desde ya gracias.....
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 Procedimiento Almacenado MySQL

Publicado por Gonzalo GC (339 intervenciones) el 11/05/2009 01:34:40
Tu problema es que:
1. Estás poniendo un BEGIN/END anidado y eso no es de MySQL.
2. La cláusula NOT EXIST pertenece a las sentencias DDL, no a las DML. Lo correcto sería verificar si te devuelve o no NULL..
3. @iduser=IdParticipante no es una asignación, sino una comparación. La asignación de un valor a una variable es en este caso: SELECTIdParticipante INTO @iduser FROM
`participante` WHERE DNI=pdni;
4. @iduser no es la variable declarada como iduser (DECLARE iduser). iduser es una variable local temporal, mientras @iduser es una variable de usuario persistente.
5. La estructura de decisión no es IF ... THEN / END, sino IF ... THEN / [ELSE] / END IF;
Tengo algunas dudas con el parámetro BINARY, porque creo que MySQL no los admite en los SP. Al menos no admite los BLOB ni los TEXT, por lo que debo verificar.

La solución de esto pasa por comprender que la sintaxis y estructura de los SP varía de DBMS en DBMS. Los SP no son iguales ni portables entre DB2, Oracle, SQL Server o MySQL. Tienes que leer el manual de usuario para verificar todos estos detalles cuando pasas de entorno en entorno.
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