Ecriture de fichiers texte via SQL

La manipulation de fichiers texte, par exemple à des fin de journalisation d’événements, peut se faire directement dans SQL à l’aide de procédure de manipulation de fichiers via des commandes OLE Automation.

Pour ce faire il convient d’utiliser les procédures sp_OA… de MS SQL Server (sp_OACreate, sp_OAMethod, sp_OADestroy).

Voici 5 procédures stockées destinées à :
– créer un fichier texte en ajout;
– ouvrir un fichier texte en ajout;
– ajouter une ligne au fichier ouvert
– ajouter du texte au fichier ouvert
– fermer un fichier texte.

ATTENTION : à défaut SQL Server interdit l’utilisation des fonctions OLE Automation. Il vous faudra donc l’autoriser par l’intermédiaire de sp_configure (Ole Automation Procedures)


CREATE  PROCEDURE P_A_FILE_OPEN_REWRITE @FILE_NAME  NVARCHAR(256), -- nom du fichier
                                        @F_HANDLE   INT   OUTPUT,  -- handle OS du fichier
                                        @F_ID       INT   OUTPUT   -- identifiant numérique du fichier
AS
 
/******************************************************************************************
* Copyright :   Frédéric Brouard / SQLpro / SQL spot                                      *
                (http://sqlpro.developpez.com - http://www.sqlspot.com)                   *
* Auteur :      Frédéric Brouard / SQL pro                                                *
* Créée le :    2006-02-01                                                                *
* Description : créé un fichier texte en écriture à l'aide d'objets OLE                   *
******************************************************************************************/
 
BEGIN
 
   SET NOCOUNT ON
 
   -- valeur de retour d'exécution appel OLE
   DECLARE @OLE_RETURN INT
 
   -- création de l'objet
   EXECUTE @OLE_RETURN = sp_OACreate 'Scripting.FileSystemObject', @F_HANDLE OUT
   IF @OLE_RETURN <> 0  RETURN -1
 
   --Ouvre le fichier (2 = ForWriting, 8 = ForAppending)
   EXECUTE @OLE_RETURN = sp_OAMethod @F_HANDLE, 'OpenTextFile', @F_ID OUT, @FILE_NAME, 2, 1
   IF @OLE_RETURN <> 0  RETURN -1
 
 
 
END
GO
 
 
CREATE PROCEDURE P_A_FILE_OPEN_APPEND  @FILE_NAME  NVARCHAR(256), -- nom du fichier
                                       @F_HANDLE   INT   OUTPUT,  -- handle OS du fichier
                                       @F_ID       INT   OUTPUT   -- identifiant numérique du fichier
AS
 
/******************************************************************************************
* Copyright :   Frédéric Brouard / SQLpro / SQL spot                                      *
                (http://sqlpro.developpez.com - http://www.sqlspot.com)                   *
* Auteur :      Frédéric Brouard / SQL pro                                                *
* Créée le :    2006-02-01                                                                *
* Description : ouvre un fichier texte en ajout à l'aide d'objets OLE                     *
******************************************************************************************/
               
BEGIN
 
   SET NOCOUNT ON
 
   -- valeur de retour d'exécution appel OLE
   DECLARE @OLE_RETURN INT
 
   -- création de l'objet
   EXECUTE @OLE_RETURN = sp_OACreate 'Scripting.FileSystemObject', @F_HANDLE OUT
   IF @OLE_RETURN <> 0  RETURN -1
 
   --Ouvre le fichier (2 = ForWriting, 8 = ForAppending)
   EXECUTE @OLE_RETURN = sp_OAMethod @F_HANDLE, 'OpenTextFile', @F_ID OUT, @FILE_NAME, 8, 1
   IF @OLE_RETURN <> 0  RETURN -1
 
END
GO
 
CREATE PROCEDURE P_A_FILE_WRITE_LINE @F_ID  INT,            -- identifiant numérique du fichier
                                     @LINE  NVARCHAR(4000)  -- ligne de texte à écrire
AS
 
/******************************************************************************************
* Copyright :   Frédéric Brouard / SQLpro / SQL spot                                      *
                (http://sqlpro.developpez.com - http://www.sqlspot.com)                   *
* Auteur :      Frédéric Brouard / SQL pro                                                *
* Créée le :    2006-02-01                                                                *
* Description : ajoute une ligne à un fichier texte l'aide d'objets OLE                   *
******************************************************************************************/
 
BEGIN
 
   SET NOCOUNT ON
 
   -- valeur de retour d'exécution appel OLE
   DECLARE @OLE_RETURN INT
 
   -- ecrit la ligne dans le fichier
   EXECUTE @OLE_RETURN = sp_OAMethod @F_ID, 'WriteLine', Null, @LINE
 
   IF @OLE_RETURN  <> 0 RETURN -1
 
END
GO
 
CREATE PROCEDURE P_A_FILE_WRITE_DATA @F_ID  INT,            -- identifiant numérique du fichier
                                     @LINE  NVARCHAR(4000)  -- texte à ajouter
AS
 
/******************************************************************************************
* Copyright :   Frédéric Brouard / SQLpro / SQL spot                                      *
                (http://sqlpro.developpez.com - http://www.sqlspot.com)                   *
* Auteur :      Frédéric Brouard / SQL pro                                                *
* Créée le :    2006-02-01                                                                *
* Description : ajoute du texte à un fichier texte l'aide d'objets OLE                    *
******************************************************************************************/
 
BEGIN
 
   SET NOCOUNT ON
 
   -- valeur de retour d'exécution appel OLE
   DECLARE @OLE_RETURN INT
 
   -- ecrit la ligne dans le fichier
   EXECUTE @OLE_RETURN = sp_OAMethod @F_ID, 'Write', Null, @LINE
 
   IF @OLE_RETURN  <> 0 RETURN -1
 
END
GO
 
CREATE PROCEDURE P_A_FILE_CLOSE @F_HANDLE INT,   -- handle OS du fichier
                                @F_ID      int   -- identifiant numérique du fichier
AS
 
/******************************************************************************************
* Copyright :   Frédéric Brouard / SQLpro / SQL spot                                      *
                (http://sqlpro.developpez.com - http://www.sqlspot.com)                   *
* Auteur :      Frédéric Brouard / SQL pro                                                *
* Créée le :    2006-02-01                                                                *
* Description : ferme un fichier texte l'aide d'objets OLE                                *
******************************************************************************************/
 
BEGIN
 
               
   SET NOCOUNT ON
 
   DECLARE @OLE_RETURN int
 
   -- fermeture du fichier
   EXECUTE @OLE_RETURN = sp_OADestroy @F_ID
 
   -- destruction de l'objet Ole
   EXECUTE @OLE_RETURN = sp_OADestroy @F_HANDLE
 
END
GO


Frédéric BROUARD, Spécialiste modélisation, bases de données, optimisation, langage SQL.
Le site sur le langage SQL et les S.G.B.D. relationnels : http://sqlpro.developpez.com/
Expert SQL Server http://www.sqlspot.com : audit, optimisation, tuning, formation
* * * * * Enseignant au CNAM PACA et à l’ISEN à Toulon * * * * *

Laisser un commentaire