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 :

ALTER TABLE ajouter une colonne s'elle n'existe pas


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Zalawy
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 137
    Par défaut ALTER TABLE ajouter une colonne s'elle n'existe pas
    Bonjour à tous,

    Je voudrai faire une requête qui ajoute un nouvelle colonne si cette dernière n'existe pas dans la table si elle existe et pas ajouter.
    Voici le code que j'ai fait :
    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
     
    DECLARE
        p_count  NUMBER;
    BEGIN 
        SELECT count(*) INTO p_count
        FROM user_tab_columns
        AND table_name = 'Table1'
        AND column_name = 'col1';
     
        IF IS_OBJECT = 0
        THEN
            BEGIN
                DBMS_OUTPUT.PUT_LINE('Ajouter la colonne col1');
                EXECUTE IMMEDIATE 'ALTER TABLE Table1 ADD (col1)';
     
    		ELSE 
    		DBMS_OUTPUT.PUT_LINE('La colonne est déjà existée');
            END;
    END IF;
    END;
    Le code de la condition d'ajouter si la colonne n'existe pas est-il bon?
    Pour plus de précision, la langue de sql est pl/sql.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Non il faut typer la colonne, c'est obligatoire.

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 175
    Par défaut
    Bonjour,

    Plusieurs soucis dans ton code.

    - Tu spécifies le nom de la table et de la colonne en mélange majuscules/minuscules, mais il faut le faire en majuscule (sauf si elles ont été créées avec des guillemets, ce qui n'est pas souhaitable)
    - Tu utilises la variable p_count pour vérifier si la colonne est présente mais ensuite tu utilises IS_OBJECT?
    - Le bloc BEGIN END interne est mal placé, il est d'ailleurs inutile ici
    - Il faut préciser un type de données pour la colonne
    - "La colonne est déjà existée" n'est pas correct, ce serait plutôt "La colonne existe déjà"

  4. #4
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Il manque la clause WHERE dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        SELECT count(*) INTO p_count
        FROM user_tab_columns
        AND table_name = 'Table1'
        AND column_name = 'col1';
    C'est quoi IS_OBJECT? Il est renseigné où?

    Je ne sais pas quel est ton métier mais quand je lis "la langue de sql est pl/sql" désolé mais ça ne veut rien dire; ton code est écrit en SQL, en PL/SQL, en Java, en C mais "la langue de sql" ne veut rie dire.

  5. #5
    Membre confirmé Avatar de Zalawy
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 137
    Par défaut
    Bonjour,
    Je vous remercie de vos réponses.

    @Waldar : typer la colonne, cela signifie la propriété de la colonne?

    @Ikebukuro : effectivement, j'ai mal placé pour écrire "la langue de sql", c'est plutôt la langue de programmation. ^^

    @vanagreg : Pour le nom de table ne majuscule/minuscule, j'ai vu sur des sites qui indiquent un nom de table en majuscule et minuscule.
    IS_OBJECT est un variable que je me suis trompée de nommer comme j'ai déjà nommer p_count.
    J'ai enlevé BEGIN et END inutiles.
    J'ai défini le type de colonne.

    Voici le code corrigée :

    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
     
    DECLARE
        p_count  NUMBER;
     
        SELECT count(*) INTO p_count
        FROM user_tab_columns
        AND TABLE_NAME = 'TABLE1'
        AND COLUMN_NAME= 'col1';
     
        IF p_count  = 0
        THEN
            BEGIN
                DBMS_OUTPUT.PUT_LINE('Ajouter la colonne col1');
                EXECUTE IMMEDIATE 'ALTER TABLE TABLE1 ADD (col1 NUMBER(12,2))';
     
    		ELSE 
    		DBMS_OUTPUT.PUT_LINE('La colonne existe déjà');
            END;
    END IF;

  6. #6
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Il manque encore la clause WHERE.

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

Discussions similaires

  1. [XL-2010] Code VBA pour ajout d'une date lorsqu'elle n'existe pas
    Par Jey14 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/10/2013, 13h39
  2. Ajouter une div si elle n'existe pas
    Par beegees dans le forum jQuery
    Réponses: 6
    Dernier message: 15/06/2011, 09h23
  3. [XL-2010] Ajouter une feuille si elle n'existe pas
    Par PhaleneCAD dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/02/2011, 20h53
  4. Ajouter une ligne si elle n'existe pas dans la table
    Par daimadoshi dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 19/11/2010, 15h52
  5. Créer une procedure si elle n'existe pas.
    Par Chouls dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 10/01/2007, 10h49

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