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 en PL/SQL de recherche et remplacement de caractères


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    Points : 69
    Points
    69
    Par défaut Script en PL/SQL de recherche et remplacement de caractères
    Bonjour,

    Je suis débutante et je souhaite créer un programme PL/SQL qui va rechercher dans tous les champs de type VARCHAR(X) des caractères spéciaux et les rempacer par des blancs et ceci pour 2 tables données.

    C'est Urgent; merci pour vos réponses

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    La vue USER_TAB_COLUMNS vous donne les colonnes ainsi que le type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select column_name, data_type from user_tab_columns
    where table_name = 'NOM_DE_LA_TABLE' ;
    faites un curseur qui récupère le nom des colonnes dont le data_type= 'VARCHAR2' et ensuite il est facile de faire un update de la table sur ces colonnes avec l'instruction REPLACE()

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    Points : 69
    Points
    69
    Par défaut SCRIPT DE REMPLACEMENT DE CARACTERES
    Merci SheikYerbouti,

    Simplement comment faire avec le curseur ? Les tables contiennent plus de 30 colonnes. Le curseur doit-il tous les récupérer ?
    Et comment faire l'Update en utilisant le Replace ? Et pourquoi pas un TRANSLATE ?

    Merci

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Ca devrait ressembler à ça :

    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
    DECLARE 
    v_update VARCHAR2(4000);
    BEGIN
    FOR tab IN (SELECT owner,table_name 
                        FROM all_tables 
                      WHERE  table_name IN ('TAB1','TAB2') 
    LOOP
    v_update := 'UPDATE '||tab.owner||'.'||tab.table_name||' SET ';
       FOR col IN (SELECT * 
                        FROM all_tab_columns 
                      WHERE table_name = tab.table_name 
                          AND owner = tab.owner
                          AND data_type LIKE '%CHAR%'       
                     )  
       LOOP
           v_update := v_update || col.column_name || '= TRANSLATE(' ||  
                              col.column_name||',(1234567890,          ),';
       END LOOP;
    EXECUTE IMMEDIATE SUBSTR(v_update,1,LENGTH(v_update)-1);
    END LOOP;
    END;
    /
    ici je supprime les chiffres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    v_update := v_update || col.column_name || '= TRANSLATE(' ||  
                              col.column_name||',(1234567890,          ),';

    Et là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE IMMEDIATE SUBSTR(v_update,1,LENGTH(v_update)-1);
    j'exécute le contenu de v_update moins le dernier caractère qui est une virgule

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    Points : 69
    Points
    69
    Par défaut
    Triple Merci ! C'est super !!!

  6. #6
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    c'est un plaisir

    Merci de cliquer sur le bouton résolu si tout est OK de votre coté

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    Points : 69
    Points
    69
    Par défaut
    Ooops!
    Et si c'était un REPLACE à la place du TRANSLATE ?

    Et Merci pour votre patience !

  8. #8
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Replace( 'chaine de recherche', 'chaine a remplacer', 'chaine de remplacement' )

    dans votre cas, chaine de recherche est votre colonne VARCHAR

  9. #9
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    v_update := v_update || col.column_name || '= TRANSLATE(' || 
                              col.column_name||',(1234567890,          ),';
    devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    v_update := v_update || col.column_name || '= REPLACE(' || 
                              col.column_name||',''@'','''')')';
    pour supprimer les @

    '@' ''

  10. #10
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Un petit exemple pour comprendre la différence entre translate et replace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL> select replace ('colonne', 'ol', '12') from dual;
    REPLACE
    -------
    c12onne
    SQL> select translate ('colonne', 'ol', '12') from dual;
    TRANSLA
    -------
    c121nne
    => replace : remplace la chaine de caracteres recherchée (ici "ol" par "12")
    => translate : remplace les caractères recherchés (ici "o" par "1" et "l" par "2")

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    Points : 69
    Points
    69
    Par défaut
    C'est très clair !!!
    Grand Grand Merci !

  12. #12
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    N'oublie pas le tag résolu alors !

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

Discussions similaires

  1. Rechercher et remplacer des caractères dans un fichier
    Par klimon dans le forum Général Python
    Réponses: 6
    Dernier message: 04/08/2014, 16h56
  2. Rechercher et remplacer des caractères d'un fichier
    Par ptitemeuh dans le forum Débuter
    Réponses: 5
    Dernier message: 21/12/2011, 13h16
  3. [SQL Server 2000]Update & remplacement de caractère
    Par Unsurgent dans le forum Développement
    Réponses: 2
    Dernier message: 30/05/2011, 10h58
  4. Besoin d'aide sur un script SQL de recherche
    Par agougeon dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/10/2005, 12h40
  5. Scripts bash : requêtes sql
    Par milka dans le forum Linux
    Réponses: 3
    Dernier message: 17/08/2005, 11h59

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