Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Stored Procedure (https://www.clubdelphi.com/foros/showthread.php?t=59417)

StartKill 26-08-2008 17:51:53

Stored Procedure
 
Muy buenas Club.

Estoy con MySQL 5.*

Tengo una tabla que basicamente consta de 3 campos
1.- ID -> Identificador del registro
2.- path_file -> Path y nombre de archivo a crear el archivo
2.- datos ->"grafico"/"Texto"...

Deseo hacer un stored procedure que me permita leer un un registro segun el campo ID y que me genere un archivo en path_file con el contenido campo datos

Nota: el archivo se genera en el server

Se que puedo hacerlo con Delphi o PHP, pero necesito que el mismo motor de base de datos lo haga con la ejecucion de un stored procedure.

Alguna idea, observacion, sugerencia para mi requemiento?.

A la espera de sus noticias (que siempre las hay )

Your friend

StartKill
Lima-Perú

poliburro 27-08-2008 02:11:20

Te pongo un SP de mysql como muestra esperando te sea de ayuda

Código SQL [-]

/****************************************************************************
06-Junio-2007
SadSpSIUCatCuentas
Edgar Ramírez Rosas     
Procedimiento orientado al manejo de las cuentas bancarias
Permite su navegación, modificación e inserción
*****************************************************************************/

Drop Procedure If Exists SadSpSIUCatCuentas;
CREATE PROCEDURE SadSpSIUCatCuentas
       (
        PVMenu     VarChar(25),   -- Define el bloque a ejecutar
        PVUSuario  Varchar(15),   -- Usuario con que se relacionará la cuenta
        PNCntId    Decimal(6,0),  -- Id de la cuenta bancaria                
        PCEstado   Char(1),       -- Id de estado de la cuenta
        PNBncid   Decimal(6,0),   -- Id del banco al que pertenece la cuenta 
        PNTCnid   Decimal(6,0),   -- Id del tipo de cuenta  
        PVumCuenta VarChar(12),   -- Número de cuenta bancaria
        PVObs      VarChar(250)   -- Observaciones        
       )

BEGIN        
  /*****************************************************************************/
  /*  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 en la base de datos' AS Mensaje;
    END;

  /*****************************************************************************/
  /*  Agrega una nueva cuenta bancaria al catálogo                             */
  /*****************************************************************************/
  If PvMenu = 'AgregaCuenta' then
     Start Transaction;

     Select IFNULL(Max(Cnt_Nid),0) + 1 InTo @SigIdCta
       From Sad_TcatCuentas; 

      Insert 
         InTo Sad_TcatCuentas
              (Cnt_NId, Bnc_Nid, TCn_Nid, Cnt_VNumCuenta, Cnt_VObs, Est_CId,
               Cnt_DFecAlta, Cnt_VUsuAlta, Cnt_DFecUltMod, Cnt_VUsuUltMod)
       Values (@SigIdCta, PNBncid, PNTCnid, PVumCuenta, PVObs, 'A',  
               Now(), PVUsuario, Now(),PVUsuario);  
    COMMIT;
    SELECT 'Nada' As Mensaje;     
  End if;



  /*****************************************************************************/
  /*  Devuelve la lista de cuentas bancarias que no han sido asignadas a un    */
  /*  usuario en particular                                                    */
  /*****************************************************************************/
  If PVMenu = 'DamCtasDispUsuario' then
       Select Cuentas.Cnt_Nid, 
              TpoCuenta.Tcn_VDescrip,
              Case 
                When Cuentas.Cnt_VNumCuenta <= 1 Then ''
                Else Concat(' - ',Cuentas.Cnt_VNumCuenta,CatBancos.Bnc_VNombre) 
              End As InfBancaria,
              Cuentas.Cnt_VObs  
         From Sad_TCatCuentas As Cuentas
    Left Join sad_trelusuctasasgn As CtasAsgn
           On CtasAsgn.Usr_Clave = PVUSuario And
              Cuentas.Cnt_NId = CtasAsgn.Cnt_Nid
    Left Join Sad_TCatTpoCuentas As TpoCuenta
           On Cuentas.Tcn_NId = TpoCuenta.Tcn_Nid
    Left Join Sad_TCatBancos As CatBancos
           On Cuentas.Bnc_Nid = CatBancos.Bnc_Nid 
        Where CtasAsgn.Cnt_NId is null;
  End If;

  /*****************************************************************************/
  /*  Asigna la cuenta a un usuario en particular                              */
  /*****************************************************************************/
  If PvMenu = 'AsignaCuenta' then
     Start Transaction;
       Insert 
         InTo sad_trelusuctasasgn
              (Usr_Clave,Cnt_Nid)
       Values (PVUSuario,PNCntId);
    Commit;
    SELECT 'Nada' AS Mensaje;     
  End if;
  
  /*****************************************************************************/
  /*  Elimina la asignación de una cuenta a un usuario en particular                              */
  /*****************************************************************************/
  If PvMenu = 'QuitaCuenta' then
     Start Transaction;
       Delete From sad_trelusuctasasgn
         Where Usr_clave = PVUSuario And
               Cnt_Nid = PNCntId;
    Commit;
    SELECT 'Nada' AS Mensaje;     
  End if;
  
  /*****************************************************************************/
  /*  Asigna la cuenta a un usuario en particular                              */
  /*****************************************************************************/
  If PvMenu = 'DameTposCuenta' then
      Select Tcn_NId, Tcn_VDescrip
        From sad_tcattpocuentas;
  End if;

  /*****************************************************************************/
  /*  Devuelve la lista de cuentas por estado a mostrar en el catálogo         */
  /*****************************************************************************/
  If PvMenu = 'DameCuentasCat' then
    
        Select CatCuenta.Cnt_Nid As Cuenta,
               TpoCta.Tcn_VDescrip,
               Case CatCuenta.Bnc_Nid  
                When 1 Then ''
                Else Concat_Ws(' - ',CatBanco.Bnc_VNombre,CatCuenta.Cnt_VNumCuenta)
               End As InfoBanc,
               CatCuenta.Cnt_VObs,
               ifnull(Importes.Capital,0) As Capital,
               IfNull(Importes.Transito,0) As Transito 
          From Sad_TCatCuentas As CatCuenta
    Inner Join Sad_TRelUsuCtasAsgn As CtasAsgn 
            On CtasAsgn.Usr_Clave = PVUSuario And
               CtasAsgn.Cnt_Nid = CatCuenta.Cnt_Nid  
     Left Join Sad_TCatTpoCuentas As TpoCta  
            On CatCuenta.TCn_Nid = TpoCta.TCn_Nid
     Left Join Sad_TCatBancos As CatBanco
            On CatCuenta.Bnc_Nid = CatBanco.Bnc_Nid
     Left Join (
                Select MovtoCta.Cnt_Nid,
                           Sum(Case MovtoCta.Mvt_CEstado
                                 When 'P' Then MovtoCta.Mvt_NImporte
                                 Else 0 
                           End) As Capital,              
                           Sum(Case MovtoCta.Mvt_CEstado
                                 When 'T' Then MovtoCta.Mvt_NImporte
                                 Else 0 
                               End) As Transito 
                      From Sad_TRegMovtosCtas As MovtoCta
                Inner Join Sad_TRelUsuCtasAsgn As CtasAsgn 
                        On CtasAsgn.Usr_Clave = PVUSuario And
                           MovtoCta.Cnt_Nid = CtasAsgn.Cnt_Nid
                  Group By MovtoCta.Cnt_Nid
               ) As Importes
            On CatCuenta.Cnt_Nid = Importes.Cnt_Nid 
         Where CatCuenta.Est_CId = PCEstado;
  End if;


  /*****************************************************************************/
  /*  Devuelve la lista de cuentas asignadas a un usuario en particular        */
  /*****************************************************************************/
  If PvMenu = 'DameCuentasAsig' then
        Select CatCuenta.Cnt_Nid As Cuenta,
               TpoCta.Tcn_VDescrip,
               Case CatCuenta.Bnc_Nid  
                When 1 Then ''
                Else Concat_Ws(' - ',CatBanco.Bnc_VNombre,CatCuenta.Cnt_VNumCuenta)
               End As InfoBanc,
               CatCuenta.Cnt_VObs 
          From Sad_TCatCuentas As CatCuenta
    Inner Join Sad_TRelUsuCtasAsgn As CtasAsgn 
            On CtasAsgn.Usr_Clave = PVUSuario And
               CtasAsgn.Cnt_Nid = CatCuenta.Cnt_Nid  
     Left Join Sad_TCatTpoCuentas As TpoCta  
            On CatCuenta.TCn_Nid = TpoCta.TCn_Nid
     Left Join Sad_TCatBancos As CatBanco
            On CatCuenta.Bnc_Nid = CatBanco.Bnc_Nid;
  End if;
   

End;

StartKill 27-08-2008 06:18:44

Humm, gracias poliburro por tu respuesta. (pensé que ya tenia mi respuesta :()

Mi requerimiento básico es: Deseo hacer un stored procedure en mysql que me permita crear un archivo en el server, este archivo tendra como contenido el "valor" de algun campo de una tabla..

Mas o menos deseo hacer algo como esto:

Procedure crea_archivo (pid)
Begin
select datos, path_file from file_datos where id=pid
into xdatos, xpath_file

flag=create_file(cpath_file)
write(xdatos,flag )
close (flag)
end


Claro está que no es un codigo verdadero, la intención es dar a conocer mi necesidad.

Necesito que este sea hecho por un stored procedure o algun otro metodo, pero que ejecute el mismo mysql.

Saludos

StartKill
Lima-Perú


La franja horaria es GMT +2. Ahora son las 13:19:59.

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