Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/12/2004, 14h24   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 60
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 60
Points : 10
Points : 10
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
Djene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2004, 14h52   #2
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
La vue USER_TAB_COLUMNS vous donne les colonnes ainsi que le type :

Code :
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()
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2004, 16h19   #3
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 60
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 60
Points : 10
Points : 10
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
Djene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2004, 16h35   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Ca devrait ressembler à ça :

Code :
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 :
1
2
3
 
v_update := v_update || col.column_name || '= TRANSLATE(' ||  
                          col.column_name||',(1234567890,          ),';

Et là :
Code :
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2004, 16h48   #5
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 60
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 60
Points : 10
Points : 10
Triple Merci ! C'est super !!!
Djene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2004, 17h26   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
c'est un plaisir

Merci de cliquer sur le bouton résolu si tout est OK de votre coté
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2004, 17h37   #7
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 60
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 60
Points : 10
Points : 10
Ooops!
Et si c'était un REPLACE à la place du TRANSLATE ?

Et Merci pour votre patience !
Djene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2004, 17h58   #8
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Replace( 'chaine de recherche', 'chaine a remplacer', 'chaine de remplacement' )

dans votre cas, chaine de recherche est votre colonne VARCHAR
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2004, 18h24   #9
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Code :
1
2
v_update := v_update || col.column_name || '= TRANSLATE(' || 
                          col.column_name||',(1234567890,          ),';
devient :

Code :
1
2
v_update := v_update || col.column_name || '= REPLACE(' || 
                          col.column_name||',''@'','''')')';
pour supprimer les @

'@' ''
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2004, 18h34   #10
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
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 866
Points : 3 448
Points : 3 448
Un petit exemple pour comprendre la différence entre translate et replace :
Code :
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")
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2004, 18h59   #11
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 60
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 60
Points : 10
Points : 10
C'est très clair !!!
Grand Grand Merci !
Djene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2004, 19h09   #12
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
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 866
Points : 3 448
Points : 3 448
N'oublie pas le tag résolu alors !
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h29.


 
 
 
 
Partenaires

Hébergement Web