Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   problema con SP en MySQL (https://www.clubdelphi.com/foros/showthread.php?t=53719)

waly2k1 27-02-2008 23:45:52

problema con SP en MySQL
 
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


Código SQL [-]

/****************************************************************************
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

Gracias Poli
 
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.


La franja horaria es GMT +2. Ahora son las 01:58:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi