Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

problemas stored procedure

Estas en el tema de problemas stored procedure en el foro de Mysql en Foros del Web. hola ojala me puedan ayudar conesto lo que pasa es que me marca un error es el siguiente: You have an error in your SQL ...
  #1 (permalink)  
Antiguo 17/12/2008, 09:28
Avatar de Zeptimo  
Fecha de Ingreso: enero-2008
Mensajes: 269
Antigüedad: 16 años, 3 meses
Puntos: 1
De acuerdo problemas stored procedure

hola

ojala me puedan ayudar conesto

lo que pasa es que me marca un error es el siguiente:

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 '' at line 141

mas abajo les indico la linea es casi al final...

saludosss...........


DELIMITER $$

DROP PROCEDURE IF EXISTS `siniestros`.`sp_actNominas` $$
CREATE PROCEDURE `siniestros`.`sp_actNominas` (pOPERACION CHAR(01),
pCurp Varchar(20),
pIdNumEmpresa TINYINT,
pIdNumRuta Smallint ,
pIdNumOperador integer,
pNombreOper varchar(60),
pFechaAlta DateTime,
pFechaSep DateTime,
pFechaNAc DateTime)
BEGIN

-- T=Consulta Todo
-- L=Lista Uno
-- I=Insert
-- D=Delete
-- C=Cambios
DECLARE
ErrDescripcion VARCHAR(80);


IF pOPERACION = 'T' then
BEGIN
SELECT
IdNumEmpresa,
IdNumRuta,
IdNumOperador,
Nombre_Oper,
DATE_FORMAT(FechaAlta,'%Y-%m-%d') as FechaAlta,
DATE_FORMAT(FechaSep,'%Y-%m-%d') as FechaSep,
Curp,
DATE_FORMAT(FechaNac,'%Y-%m-%d') as FechaNac

FROM Nominas
order by NombreOper;

END;
END IF;

IF pOPERACION = 'L' then
BEGIN
SELECT
IdNumEmpresa,
IdNumRuta,
IdNumOperador,
NombreOper,
DATE_FORMAT(FechaAlta,'%Y-%m-%d') as FechaAlta,
DATE_FORMAT(FechaSep,'%Y-%m-%d') as FechaSep,
Curp,
DATE_FORMAT(FechaNac,'%Y-%m-%d') as FechaNac

FROM Nominas
WHERE Curp = pCurp;

END;
END IF;
IF pOPERACION = 'D' then
BEGIN
START TRANSACTION;
DELETE FROM Nominas
WHERE Curp = pCurp;

if (ErrDescripcion <> 0) then
BEGIN
SET ErrDescripcion = 'Error al Intentar BORRAR datos en la Variable Temporal: TablaX_vtt';


ROLLBACK;

END;
ELSE
COMMIT;
END IF;

IF pOPERACION = 'I' then
BEGIN
START TRANSACTION;
INSERT INTO Nominas
(IdNumEmpresa,
IdNumRuta,
IdNumOperador,
NombreOper,
FechaAlta,
FechaSep,
Curp,
FechaNac
)
values
( pIdNumEmpresa,
pIdNumRuta,
pIdNumOperador,
pNombreOper,
pFechaAlta,
pFechaSep,
pCurp,
pFechaNac
);
END;
END IF;
if (ErrDescripcion <> 0) then
BEGIN
SET ErrDescripcion = 'Error al Intentar BORRAR datos en la Variable Temporal: TablaX_vtt';

ROLLBACK;

END;
ELSE
COMMIT;


END IF;
IF pOPERACION = 'C' THEN
BEGIN
START TRANSACTION;
UPDATE Nominas

Set
IdNumEmpresa = pIdNumEmpresa,
IdNumRuta = pIdNumRuta,
IdNumOperador = pIdNumOperador,
NombreOper = pNombreOper,
FechaAlta = pFechaAlta,
FechaSep = pFechaSep,
FechaNac = pFechaNac
WHERE
Curp = pCurp;
END;
END IF;
if (ErrDescripcion <> 0) then
BEGIN
SET ErrDescripcion = 'Error al Intentar BORRAR datos en la Variable Temporal: TablaX_vtt';

ROLLBACK;

END;
ELSE
COMMIT;
linea 141--------- END IF;



END $$

DELIMITER ;
  #2 (permalink)  
Antiguo 17/12/2008, 10:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: problemas stored procedure

A primera vista es simple: MySQL no admite más de un BEGIN/END en el cuerpo de un SP o de una función o trigger, y tu estás poniendo esto:
Código sql:
Ver original
  1. BEGIN
  2. SET ErrDescripcion = 'Error al Intentar BORRAR datos en la Variable Temporal: TablaX_vtt';
  3. ROLLBACK;
  4. END;
Eso no puede estar allí. Es posible que estés copiando código de orto DBMS: ten cuidado con las migraciones.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 17/12/2008, 10:25
Avatar de Zeptimo  
Fecha de Ingreso: enero-2008
Mensajes: 269
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: problemas stored procedure

y como puedo solucionarlo esque anterior mente esta una condicion

if @@error <> 0 y esto me marcaba error

por eso declare una variable que es ErrDescripcion para que no me marcara el error..

entonces como puedo hacerle?
  #4 (permalink)  
Antiguo 17/12/2008, 10:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: problemas stored procedure

Ese no es el problema, el problema es el BEGIN / END que estas haciendo nesting, y es lo que no soporta MySQL.

Saludos.
  #5 (permalink)  
Antiguo 17/12/2008, 11:20
Avatar de Zeptimo  
Fecha de Ingreso: enero-2008
Mensajes: 269
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: problemas stored procedure

Lo se , los quite pero aun me marca ese error........

Saludos............
  #6 (permalink)  
Antiguo 17/12/2008, 11:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: problemas stored procedure

Si lo que quieres hacer es controlar lo que pase con los errores, lo que debes hacer es crear un HANDLER para que controle los eventos WARNING.
19.2.10. Conditions and Handlers
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 17/12/2008, 11:33
Avatar de Zeptimo  
Fecha de Ingreso: enero-2008
Mensajes: 269
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: problemas stored procedure

Si no es tanta molestia no tienes algun ejemplo de handler mas claro que tu hayas realizado o lo hayas visto...porque ya vi el link y me parecio un poco confuso ya que en realidad no me he metido tanto en mysql y si no, pues no hay problema lo tratare de hacer

saludos.................
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:38.