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

PostgreSQL Discussion :

Création de table avec Null par defaut


Sujet :

PostgreSQL

  1. #1
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut Création de table avec Null par defaut
    Bonjour, je voudrais créer une table avec null par defaut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE contact (
        idcontact serial NOT NULL,
        connom character varying,
        conprenom character varying,
        idparticipant integer,
        concivilite character varying
    );
    je ne sais comment m'y prendre.

    La diccficulté est que le programme que j'utilise pour attaquer ma DB met une chaine de caractère vide par defaut, et moi je voudrais un null, est-il possible de le faire a partir de la base?

    Merci de votre aide

  2. #2
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 71
    Points : 64
    Points
    64
    Par défaut
    Pour les valeurs par défaut, il faut rajouter le mot DEFAULT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE products (
        product_no integer,
        name text,
        price numeric DEFAULT 9.99
    );
    mais si tu veux qu'une valeur de champ soit à NULL par défaut, il suffit de ne pas renseigner le champ à la création de l'enregistrement.

    Cela répond à ta question ?

    Sakalam
    Marre des blogs trop chiadés ?
    http://blog-de-m.over-blog.com/
    Enfin, un vrai blog de merde (d'un copain) !

  3. #3
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Merci, mais ce que je cherche à faire est une sorte de case, je dois maintenir la table et ne pas modifier le programme, donc d'office si la variable est vide, il enregistre une chaine de caratère vide, j'aurais voulu savoir si ce genre d'écriture étais possible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE TABLE contact (
        idcontact serial NOT NULL,
        connom character varying DEFAULT (CASE WHEN connom="" THEN NULL ELSE connom END),
        conprenom character varyingDEFAULT (CASE WHEN conprenom="" THEN NULL ELSE conprenom END),,

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 81
    Points : 82
    Points
    82
    Par défaut
    bonjour.

    Lorsque tu ne renseignes pas un champ lors d’une insertion, et s’il n’y a pas de contrainte de type Not Null, par défaut ce champ sera vide c'est-à-dire NULL. Maintenant si tu veux écrire dans ce champ NULL ce la veut dire que tu vas insérer une chaine de caractère 'NULL'.

    Ce que je veux que tu saches c'est qu'un champ qui n'a aucune valeur (vide) il est à NULL. Pour tester fait :
    select * from <nom de la table> where <la colonne>is NULL ; la requête va renvoyer toutes les lignes dont le champ de la colonne (<la colonne>) est vide (NULL).

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Citation Envoyé par jarod_ab
    bonjour.

    Lorsque tu ne renseignes pas un champ lors d’une insertion, et s’il n’y a pas de contrainte de type Not Null, par défaut ce champ sera vide c'est-à-dire NULL...

    ...Ce que je veux que tu saches c'est qu'un champ qui n'a aucune valeur (vide) il est à NULL. .
    Je pense avoir assimilé ça, pas de problème, mais voyez la requète suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(dosmotifsortie) AS nombre
    FROM dossier
    WHERE dosmotifsortie IS NULL
    Reponse : nombre = 0

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(dosmotifsortie) AS nombre
    FROM dossier
    WHERE dosmotifsortie =''
    Reponse : nombre = 114


    mon programme envoie bien toutes les valeurs, même celle qui sont vide, et si elle sont vide leur passe une chaine de caractère vide et je voudrais éviter cela.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 81
    Points : 82
    Points
    82
    Par défaut
    REbjr...
    quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     select count(<nomde la colonne>) from <le nom de la table>;
    cette requête fait des comptages sur les champs de la colonne qui ne sont pas à vide (NULL). en d'autre termes,
    La fonction Count ne compte pas les enregistrements possédant des champs Null.
    pour compter les lignes de ta table où les champs de la colonne (la colonne) sont vides écrie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     select count(*) from <la table> where <la colonne> is null
    normalement ça doit marcher...

  7. #7
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    une solution est de passer par un trigger qui vérifie la valeur entrée et y substitue une autre si nécessaire.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  8. #8
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Citation Envoyé par GrandFather
    une solution est de passer par un trigger qui vérifie la valeur entrée et y substitue une autre si nécessaire.
    Merci, et pourriez-vous m'aider à contruire ce trigger?

  9. #9
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Ca donnerait cela :
    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 FUNCTION subst_null()
      RETURNS "trigger" AS
    $BODY$BEGIN
      IF NEW.dosmotifsortie IS NOT NULL AND NEW.dosmotifsortie = '' THEN
        NEW.dosmotifsortie := NULL;
      END IF;
      RETURN NEW;
    END;$BODY$
      LANGUAGE 'plpgsql' VOLATILE;
     
    CREATE TRIGGER tg_subst_null
      BEFORE INSERT
      ON dossier
      FOR EACH ROW
      EXECUTE PROCEDURE subst_null();
    Il serait plus propre d'utiliser une règle (CREATE RULE), mais je n'ai pas réussi à trouver une expression qui n'entraîne pas de récursion infinie. Si quelqu'un a une idée, la réponse m'intéresse.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 81
    Points : 82
    Points
    82
    Par défaut
    Rebjr...
    oui c vrai avec un trigger ça marche, mais on peut répondre à la requête (count(dosmotifsortie)) sans avoir besoin d'un trigger. encore une fois je reécris ce que j'ai dit en haut:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    pour compter les lignes de ta table où les champs de la colonne (dosmotifsortie) sont vides écrie : 
    select count(*) from <la table> where <dosmotifsortie> is null
    normalement ça doit marcher...

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

Discussions similaires

  1. Creation de table avec valeur par defaut
    Par Tsukaasa dans le forum JDBC
    Réponses: 0
    Dernier message: 01/09/2008, 17h45
  2. champs avec undefined par defaut grrrr
    Par logone dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/04/2006, 09h29
  3. Création de tables avec postgresql
    Par angiosfr dans le forum JDBC
    Réponses: 6
    Dernier message: 28/09/2005, 20h43
  4. [Système] Ouvrir fichier externe avec prog par défaut de l'OS
    Par Pill_S dans le forum API standards et tierces
    Réponses: 9
    Dernier message: 30/05/2004, 11h54
  5. Création de table avec index
    Par Seb7 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/04/2003, 16h11

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