PDA

Ver la Versión Completa : Stored Procedure


StartKill
26-08-2008, 17:51:53
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



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