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

SQL Oracle Discussion :

alter table : valeur par défaut d'une autre colonne


Sujet :

SQL Oracle

  1. #1
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut alter table : valeur par défaut d'une autre colonne
    Bonjour,

    Je voudrais faire un truc un peu tordu, mais je ne sais pas si c'est possible : ajouter une colonne a une table existante, et je voudrais que la valeur par defaut de cette nouvelle colonne soit la valeur de la premiere colonne [ou d'une autre, mais c'est pareil].

    Exemple :
    table TB_TEST avant modif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    col1 VARCHAR2(42); --> Not Null
    col2 INT;
    table TB_TEST apres modif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    col1 VARCHAR2(42); --> Not Null
    col2 INT;
    col3 VARCHAR2(42); --> Not null, default value col1
    alors bien sur, j'ai cherche un peu, j'ai teste des trucs du genre : alter table TB_TEST add col3 varchar2(42) default TB_TEST.col1 ;, mais vous vous doutez bien que si je pose la question, c'est que je n'ai pas reussi a trouver la solution.

    Si vous savez si c'est possible ou non, merci de me l'indiquer, si possible avec le alter table ca serait encore mieux !
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Ce n'est pas possible à ma connaissance.

    Vous pouvez néanmoins en obtenir l'effet en ajoutant soit dans la table si vous êtes en 11g+, soit via une vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    col1 VARCHAR2(42); --> Not Null
    col2 INT;
    col3 VARCHAR2(42); --> null, 
    col4 -> (coalesce(col3, col1))

  3. #3
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Restriction on Default Column Values A DEFAULT expression cannot contain references to PL/SQL functions or to other columns, the pseudocolumns CURRVAL, NEXTVAL, LEVEL, PRIOR, and ROWNUM, or date constants that are not fully specified.
    <Edit>
    Mai probablement que vous n’avez vraiment pas besoin de stocker une information redondante.

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Mais probablement que vous n’avez vraiment pas besoin de stocker une information redondante.
    Non, c'est certain, mais j'ai en fait une contrainte sur le fait que cette colonne ne doit pas etre vide, et que si je n'ai pas de valeur a y mettre, je veux qu'elle contienne la meme chose que la colonne 1.

    En gros, c'est tout a fait possible dans mon programme de tester si j'ai ou non l'information, et si je ne l'ai pas de lire la valeur de col1 pour la mettre dans col3, mais je me disais que si Oracle pouvait le faire, ca serait toujours plus simple (et donc moins source de bug).

    Merci pour vos informations, je vais donc faire ca dans mon programme.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Mettez la restriction not null sur la nouvelle colonne et gerez "la valeur par défaut" via un trigger (mais bon je ne suis pas un fan des triggers).

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/11/2009, 20h11
  2. Valeur par défaut égale à une autre colonne
    Par jarailet dans le forum Requêtes
    Réponses: 10
    Dernier message: 30/06/2009, 16h17
  3. Réponses: 10
    Dernier message: 04/11/2008, 14h30
  4. Réponses: 2
    Dernier message: 28/05/2007, 09h28
  5. Valeur par défaut dans une table objet
    Par Ricky81 dans le forum Oracle
    Réponses: 12
    Dernier message: 18/03/2004, 11h52

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