PDA

Ver la Versión Completa : problema con SP en MySQL


waly2k1
27-02-2008, 23:45:52
Hola gente, nuevamente acudiendo a uds. por un problema de sintaxis en Stored Procedures con MySQL. El problema en cuestion es la sintaxis IF/ELSE
quisiera un sencillo ejemplo de como se realiza un simple if/else ya que la sintaxis varia de SQL Server / Interbase que es lo que mas 'manejo'.

Bueno es todo por el momento. Desde ya muchas gracias.
Saludos

poliburro
28-02-2008, 06:56:54
Este es el código de uno de mis sps en mysql. Epero te sirva




/****************************************************************************
17-Mayo-2007
SpCatEmpleados
Edgar Ramírez Rosas
Procedimiento orientado al manejo del catálogo de usuarios.
Permite su navegación, modificación e inserción
*****************************************************************************/

Drop Procedure If Exists SpCatEmpleados;
CREATE PROCEDURE SpCatEmpleados
(PsMenu Varchar(25), -- Define el bloque a ejecutar
PnIdEmp Decimal(18,0), -- Define el Id del empleado
PVNombre varchar(100), -- Nombre
PVDirec varchar(100), -- Dirección
PVTelefono varchar(25), -- Número de telefono
PNSueldo Decimal(12,2), -- Sueldo
PVIngreso Varchar(10), -- Fecha de ingreso
PCEstado char(1), -- Estado
PVUsuario VarChar(15) -- Usuario que invoca el procedimiento
)
BEGIN

DECLARE VD_SigIdEmp Decimal(18,0) Default 0; -- Id del usuario

/**************************************************/
/* de ocurrir un problema en las consultas, se lanzará el siguiente*/
/* manejador */
/**************************************************/

DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
Rollback;
SELECT 'Ocurrió un problema al ejecutar la operación.' As Mensaje;
END;

/*********************************************/
/* Modifica los datos de un empleado en particular */
/*********************************************/

If PsMenu = 'ModDatEmp' Then START TRANSACTION;
Update Sad_TCatEmpleados
Set Emp_VNombre = PVNombre,
Emp_VTelefono = PVTelefono,
Emp_VDirec = PVDirec,
Emp_NSueldo = PNSueldo,
Emp_DIngreso = PVIngreso,
Emp_CEstado = PCEstado,
Emp_VUsuUltMod = PVUsuario,
Emp_DFecUltAct = Now()
Where Emp_Nid = PnIdEmp;
Commit;
Select 'Nada' As Mensaje;
End If;

If PsMenu = 'AgregaEmp' Then START TRANSACTION;

Select IFNULL(Max(Emp_Nid),0) + 1 InTo VD_SigIdEmp
From Sad_TCatEmpleados;

Insert
INTO Sad_TCatEmpleados
(Emp_Nid, Emp_VNombre, Emp_VDirec, Emp_VTelefono,
Emp_NSueldo, Emp_DIngreso, Emp_CEstado, Emp_VUsuAlta,
Emp_DFecAlta,Emp_VUsuUltMod, Emp_DFecUltAct)
Values (VD_SigIdEmp,PVNombre, PVDirec, PVTelefono, PNSueldo,
PVIngreso, PCEstado, PVUsuario, Now(), PVUsuario, Now());
Commit;
Select 'Nada' As Mensaje;
End If;


/**************************************************/
/* Devuelve la lista de empleados activos */
/**************************************************/

If PsMenu = 'DameListEmpAct' Then SELECT Emp_Nid, Emp_VNombre
FROM Sad_TCatEmpleados
WHERE Emp_CEstado = 'A';
End If;

/****************************************************/
/* Devuelve la lista de empleados activos que no han sido asignados */
/*****************************************************/

If PsMenu = 'DameListEmpActNoAsig' Then SELECT CatEmp.Emp_Nid, Emp_VNombre
FROM Sad_TCatEmpleados As CatEmp
Left Join Sad_TCatUsuarios As CatUsu
On CatEmp.Emp_Nid = CatUsu.Emp_Nid
WHERE Emp_CEstado = 'A' And CatUsu.Emp_Nid is Null;
End If;



END

waly2k1
03-03-2008, 21:53:52
Respondo un poco tarde, porque ando muy desconectado ultimamente.
muchas gracias por el ejemplo, y mi problema era el END IF. Como se les ocurrio poner END IF;?, juas, probe con begin, end y demas posibles causas pero nunca me hubiera imaginado un end if, y el mensaje de error decia algo asi como que busque el manual porque esta mal, pero doooonde ??.

En fin viejo, muchas gracias como siempre.