IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Procédure PL/SQL : passer un fichier .txt ou .csv en paramètre


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Par défaut Procédure PL/SQL : passer un fichier .txt ou .csv en paramètre
    Bonjour à tous,

    Je travaille sur une base de données que je veux mettre à jour en utilisant un fichier txt ou csv.

    Pour cela, je veux écrire une procédure en PL/SQL qui prend en paramètre ce fichier, parcours ses lignes et applique les mises à jour.

    Ce que je demande ici c'est comment passer un fichier en paramètre. J'ai pensé à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create or replace procedure MiseAJour (monFichier UTL_FILE.FILE_TYPE) IS ...
    des suggestions ?

    Merci d'avance

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    C'est la bonne méthode si le fichier est sur le sur le serveur de base et que tu l'ouvres avant.

  3. #3
    Membre confirmé Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Par défaut
    si le fichier est sur le sur le serveur de base et que tu l'ouvres avant.
    Je dois mettre le fichier sous quel path ?
    Vous voulez dire quoi par l'ouvrir avant ? avant de créer la procédure ou avant d'exécuter la procédure ?

    Merci

  4. #4
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Personnellement je préfère utiliser le Loader SQL et travailler le contenu du fichier à partir d'une table temporaire.

    Je dois mettre le fichier sous quel path ?
    Celui que tu veux mais attention, cela dépend du paramétrage du serveur, il est possible que le fichier doit se trouver impérativement sur le serveur Oracle et non sur un serveur distant

    avant de créer la procédure ou avant d'exécuter la procédure ?
    Je pense que McM voulait dire qu'il fallait ouvrir le fichier via UTL_FILE.FOPEN dans ta procédure avant de commencer à le scanner

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Le path, c'est un DIRECTORY Oracle sur le serveur.
    Un file_type, c'est un pointeur sur un fichier, donc forcément déjà ouvert par utl_file.fopen

    Pour compléter : La base ne peut accéder directement au poste client.

    Pour intégrer un fichier, 3 possibilités :
    sqlloader (ça reste du manuel, donc à réserver au one-shot)
    lecture de fichier par utl_file (le fichier doit être sur le serveur de base)
    table externe (le fichier doit aussi être sur le serveur de base)
    par forms : webutil, upload dans un clob et lecture du clob

    Tout dépend de l'utilisation, de sa fréquence, volumétrie, besoin d'avoir un historique, etc..

  6. #6
    Membre confirmé Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Par défaut Procédure de mise à jour
    Merci pour tous vos aides.

    Voilà ce que je viens de faire :
    1- j'ai créé un directory nommé repertoire qui pointe sur le répertoire physique existant sur le disque et contenant mon fichier
    2- j'ai écrit cette procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    CREATE OR REPLACE PROCEDURE MiseAJour (resultat2.txt UTL_FILE.FILE_TYPE) IS
    	-- declaration des constantes, variables, curseurs et exceptions
    	fich_resultat UTL_FILE.FILE_TYPE;
    	buffer varchar2(1500);
     
    BEGIN
    	-- creation du descripteur du fichier
    	fich_resultat := UTL_FILE.FOPEN ('repertoire', 'resultat2.txt', 'r');
     
    	-- lecture du fichier et insertion des données dans la table Avion
    	loop
    		UTL_FILE.DET_LINE(fich_resultat, buffer);
    		exception
    			when no_data_found then exit;
    		end;
    		insert into Avion () values (buffer);
    	end loop;
    	commit;
     
    	UTL_FILE.FCLOSE(fich_resultat);
    	 -- declaration des exceptions
     
    END;
    Mon souci ici est : je sais et je suis sûre que chaque enregistrement du fichier (chaque ligne) a la même structure que celle de chaque enregistrement de ma table Avion. L'insertion des données dans la table se fait-elle convenablement ? C'est-à-dire est-ce que l'enregistrement du fichier est lu champ par champ ?

    J'espère être bien claire.



    Merci pour tout éclaircissement

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/07/2013, 18h43
  2. Réponses: 9
    Dernier message: 17/07/2008, 09h14
  3. Réponses: 3
    Dernier message: 31/05/2007, 09h54
  4. [SQL-VBA] récupérer le résultat d'une requète SQL dans un fichier txt
    Par djidanestribbal dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 13/02/2007, 15h25
  5. PL/SQL lecture/ecriture fichier txt
    Par stos dans le forum PL/SQL
    Réponses: 2
    Dernier message: 19/05/2006, 12h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo