Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
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 13/02/2006, 16h07   #1
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 167
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 167
Points : 6 451
Points : 6 451
Par défaut Création de table avec Null par defaut

Bonjour, je voudrais créer une table avec null par defaut.

Code :
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
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2006, 18h31   #2
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 72
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 72
Points : 35
Points : 35
Pour les valeurs par défaut, il faut rajouter le mot DEFAULT

Code :
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
Sakalam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2006, 08h38   #3
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 167
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 167
Points : 6 451
Points : 6 451
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 :
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),,
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2006, 13h02   #4
Membre du Club
 
Inscription : décembre 2005
Messages : 81
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 81
Points : 66
Points : 66
Envoyer un message via MSN à 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. 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).
jarod_ab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2006, 13h22   #5
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 167
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 167
Points : 6 451
Points : 6 451
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 :
1
2
3
SELECT COUNT(dosmotifsortie) AS nombre
FROM dossier
WHERE dosmotifsortie IS NULL
Reponse : nombre = 0

Code :
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.
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2006, 14h23   #6
Membre du Club
 
Inscription : décembre 2005
Messages : 81
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 81
Points : 66
Points : 66
Envoyer un message via MSN à jarod_ab
REbjr...
quand tu fais
Code :
 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 :
 SELECT count(*) FROM <la table> WHERE <la colonne> IS NULL
normalement ça doit marcher...
jarod_ab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2006, 14h44   #7
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
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
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2006, 16h00   #8
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 167
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 167
Points : 6 451
Points : 6 451
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?
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2006, 18h17   #9
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
Ca donnerait cela :
Code :
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
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2006, 09h20   #10
Membre du Club
 
Inscription : décembre 2005
Messages : 81
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 81
Points : 66
Points : 66
Envoyer un message via MSN à jarod_ab
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 :
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...
jarod_ab 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 05h29.


 
 
 
 
Partenaires

Hébergement Web