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

Oracle Discussion :

Cherche à remplacer un caractère # par NULL


Sujet :

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 Cherche à remplacer un caractère # par NULL
    Bonjour,

    Quelqu'un pourrait-il me montrer comment mettre en place une procédure permettant de remplacer des caractères # par la valeur NULL. Plusieurs tables sont concernées et on ne sait pas dans quelles colonnes se trouvent les caractères #.

    Merci par avance pour votre aide.

    Djene

  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
    Pour le remplacement en lui-même, utilisez l'instruction Replace()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    col = Replace( col, '#', '' ) ;
    Pour ce qui est de scruter toutes les colonnes d'une table, c'est une autre histoire. Il va vous faloir passer par du SQL synamique en bouclant sur les colonnes (USER_TAB_COLUMNS)

  3. #3
    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
    Quelque chose dans ce genre

    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
    DECLARE
      PC$TableName   VARCHAR2(30) := 'DEPT' ;
      CURSOR C_COLS IS SELECT column_name FROM USER_TAB_COLUMNS
      WHERE TABLE_NAME = PC$TableName 
      AND DATA_TYPE = 'VARCHAR2' ;
      LC$Req  VARCHAR2(256) := 'UPDATE ' || PC$TableName || ' SET ';
    BEGIN
      FOR C IN C_COLS LOOP
         IF C_COLS%ROWCOUNT > 1 THEN
    	   LC$Req := LC$Req || ',' ;
    	 END IF ;
    	 LC$Req := LC$Req || C.COLUMN_NAME || ' = Replace(' || C.COLUMN_NAME || ',''#'', '''' )' ;
      END LOOP ;
      EXECUTE IMMEDIATE LC$Req ;
    END ;

  4. #4
    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 Remplacer des # par NULL
    Merci beaucoup pour votre réponse si rapide.
    Simplement, plusieurs tables sont concernées (au moins 6) et elles ont plusieurs colonnes. Ma question est :comment balayer toutes ces tables pour le remplacement et surtout comment les inclure dans la solution de votre procédure ?

    Désolée mais je ne m'y connais pas du tout.

    Merci encore pour votre aide

  5. #5
    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 ce que fait le code proposé que tu dois éventuellement un peu adapter

  6. #6
    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 même chose transforme en procedure qui prend un nom de table en paramètre:

    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
    CREATE OR REPLACE PROCEDURE TMP_REPLACE( PC$TableName IN VARCHAR2 )
    IS
      CURSOR C_COLS IS SELECT column_name FROM USER_TAB_COLUMNS
      WHERE TABLE_NAME = PC$TableName 
      AND DATA_TYPE = 'VARCHAR2' ;
      LC$Req  VARCHAR2(256) := 'UPDATE ' || PC$TableName || ' SET ';
    BEGIN
      FOR C IN C_COLS LOOP
         IF C_COLS%ROWCOUNT > 1 THEN
    	   LC$Req := LC$Req || ',' ;
    	 END IF ;
    	 LC$Req := LC$Req || C.COLUMN_NAME || ' = Replace(' || C.COLUMN_NAME || ',''#'', '''' )' ;
      END LOOP ;
      EXECUTE IMMEDIATE LC$Req ;
    END ;
    que vous pouvez appeler dans une boucle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DECLARE
      CURSOR C_TAB IS SELECT TABLE_NAME FROM USER_TABLES ;
    BEGIN
      FOR  C IN C_TAB LOOP
         tmp_replace( C.TABLE_NAME ) ;
      END LOOP ;
    END;

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    ne s'agirait-il pas d'un formatage de sqlplus ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SQL> col n for 999
    SQL> select 1000 n from dual;
       N
    ----
    ####
    dans ce cas, il suffit de reformater les colones, par exemple avec clear col
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SQL> clear col
    columns cleared
    SQL> select 1000 n from dual;
             N
    ----------
          1000

Discussions similaires

  1. Remplacer certains caractères par ""
    Par Terminator dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 10/05/2007, 14h58
  2. remplacer un caractère par un retour chariot
    Par illight dans le forum Langage
    Réponses: 4
    Dernier message: 16/02/2007, 15h25
  3. Remplacer un caractère par un autre
    Par cybkilla dans le forum Sybase
    Réponses: 3
    Dernier message: 08/01/2007, 15h42
  4. Cherche à remplacer les mailslots par autre chose.
    Par asenaici dans le forum Delphi
    Réponses: 2
    Dernier message: 04/12/2006, 12h30
  5. Remplacer un caractère par une image
    Par mr.t dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 27/10/2005, 09h18

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