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 :

Script(s) de transcodage en PL/SQL


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 31
    Par défaut Script(s) de transcodage en PL/SQL
    Bonjour,
    Je dois réaliser un (ou des) script(s) de transcodage en PL/SQL.
    Je n'ai pas tellement pratiqué ce langage donc je ne sais pas trop comment démarrer pour réaliser la demande.

    Je vais essayer d'être clair, succinct et précis.

    Au départ, j'ai une table de correspondance en Excel (que je devrais convertir par la suite en fichier texte avec séparateur de champ ou en table) à 2 colonnes :
    - une colonne A qui contient un identifiant A,
    - et une colonne B qui contient un identifiant B.

    Le principe est que pour chaque table où l'identifiant A est présent (une bonne dizaine de tables en tout), je dois le remplacer par l'identifiant B.

    Je pensais faire une moulinette pour chaque table concernée avec une boucle de lecture de mon fichier de données en entrée et, pour chaque occurrence 'identifiant A' trouvée, faire une requête de mise à jour avec l'identifiant B.

    Pourriez-vous m'aiguiller sur la meilleure et plus simple façon de faire ?

    En vous remerciant par avance.
    Cordialement,
    Olivier

  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
    Plusieurs solutions suivant la fréquence d'utilisation.
    Si c'est du one-shot sans avoir 10M de lignes, insérer manuellement les données du fichier excel dans une table temporaire et faire ton script d'update en te basant dessus.
    Si c'est du récurent ou s'il y a beaucoup de lignes dans ton fichier excel (plus de 20 000), faut passer par du fichier texte, et ensuite soit de la lecture de fichier par UTL_FILE, soit en table externe.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 31
    Par défaut
    Bonjour,
    Merci McM.
    J'ai beaucoup de lignes dans mes fichiers textes : un avec 65000 lignes et l'autre avec plus de 25000 lignes, donc je pense passer par un fichier texte et ensuite le lire par UTL_FILE.
    Voici un extrait de mes fichiers d'entrée :
    837426;3000837426
    837437;3000837437
    837448;3000837448
    837459;3000837459
    837460;3000837460
    837470;3000837470
    837492;3000837492
    837506;3000837506
    837539;3000837539
    837540;3000837540
    837550;3000837550
    837561;3000837561
    837572;3000837572
    837583;3000837583
    837594;3000837594
    J'ai commencé un petit script avec quelques exemples trouvés sur le net :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    -- On créé ou on remplace un répertoire nommé monChemin qui pointe sur /u01 (repértoire existant au niveau de l'OS)
    CREATE OR REPLACE DIRECTORY "monChemin" AS '/u01';
     
    DECLARE
    /* Création du descripteur de fichier */
    monFichier  UTL_FILE.FILE_TYPE;
    buffer varchar2 (10);
     
    begin
    /* Ouverture du fichier Transco_ipp.txt en lecture (r)
       si situant dans le répertoire contenu dans l'objet DIRECTORY
       monChemin.
    */
    monFichier := UTL_FILE.FOPEN ('monChemin','Transco_ipp.txt', 'r');
     
    loop
      begin
        utl_file.get_line (monFichier, buffer);
      exception
        when no_data_found then exit;
      end;
    --  INSERT INTO opts(valeur) VALUES(buffer);
      UPDATE tableX SET PAT_C_IPP='buffer' WHERE ...
    end loop;
    commit;
     
    /* Fermeture du descripteur de fichier */
    UTL_FILE.FCLOSE (monFichier);
     
    /* Bloc d'exceptions */
    EXCEPTION
      WHEN UTL_FILE.INVALID_PATH then
      dbms_output.put_line ('Chemin Invalide');
      RAISE;
      WHEN OTHERS then
         RAISE;
    end;
    /
    Au niveau de l'UPDATE, je suis coincé.
    Je voudrais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE maTable SET maColonne='2ème champ de mon fichier texte' WHERE maColonne='1er champ de mon fichier texte'
    Pourriez-vous m'aiguiller SVP, je n'arrive pas à me le représenter via le langage ?
    Merci.

    Bonne journée.
    Cdlt,
    Olivier

  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
    Faire une fonction qui boucle sur le buffer en effectuant un découpage zone à zone à l'aide du séparateur (SUBSTR, INSTR)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 31
    Par défaut
    Pourrais-je avoir un exemple de syntaxe SVP?
    Si qqun pouvait m'aider.
    Merci.
    Cdlt,
    Olivier

  6. #6
    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
    Ta variable buffer contient donc une ligne à chaque boucle (enfin faudra augmenter sa taille parce que buffer est déclaré en varchar2(10) et que tes lignes font visiblement 17 caractères minimum)

    c'est comme si tu avais affecté buffer := '837470;3000837470';
    à toi de découper ta chaine comme le dit Scriuiw en utilisant le séparateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    v1 := SUBSTR(buffer, 1, INSTR(buffer, ';') -1);
    v2 := SUBSTR(buffer, INSTR(buffer, ';') +1);
    et ensuite tu passes ton update avec ces variables.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Script de protection contre l'injection SQL
    Par mabrouk1987 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 10/12/2009, 08h52
  2. extraction du script d une base de donnee SQL 2005
    Par idream dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 11/08/2009, 23h40
  3. script d'insertion auto de fichier .sql dans mysql
    Par cobra85 dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/04/2009, 12h06
  4. script d'insertion auto de fichier .sql dans mysql
    Par cobra85 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 10/04/2009, 11h53
  5. script generique load et generation pl/sql
    Par ddmonge dans le forum PL/SQL
    Réponses: 1
    Dernier message: 17/05/2006, 17h56

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