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

Requêtes PostgreSQL Discussion :

Requête / function avec IF-THEN


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut Requête / function avec IF-THEN
    Bonjour à tous,

    J'aurais besoin d'un petit coup de pouce pour une rêquete avec un IF THEN.

    Context :
    J'importe des données via un excel dans une table nommé copydata . Une de mes donnée est une date, elle est stocké dans le champs data66 lors de l'importation. Selon les fichiers le format de la donnée change parfois c'est un reel, parfois c'est un text. Je cherche à stocker la date selon son type dans la table "project" dans laquel j'ai créer deux colonnes avec ces deux différents type: proj_dateChar et proj_dateReal.

    Ma requête :
    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
     
    CREATE OR REPLACE FUNCTION test_date ()
     RETURNS VOID AS $$
     
    	DECLARE
    		type_date66 char;
     
    	BEGIN		
    		SELECT data_type  INTO type_date66 FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'copydata' AND column_name ='date66';
    		RAISE notice 'verif(%)', type_data66;
    		IF type_date66 = 'real' THEN
    			EXECUTE 'INSERT INTO project(proj_dateReal)SELECT data66';
    		ELSE 
    			EXECUTE 'INSERT INTO project(proj_dateChar)SELECT data66';
    		END IF;
    	END;
      $$
      LANGUAGE plpgsql VOLATILE;
    Erreur:
    J'ai déclaré type_date66 mais il me dit qu'il n'existe pas.

    Avez vous des conseils pour gérer d'une autre facons ces deux formats de date un peu bizarre ? Auriez vous une idée pour ma fonction ?

    Merci d'avance

  2. #2
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    Le code doit être...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE 'INSERT INTO project(proj_dateReal)SELECT '|| data66;
    Il faut concaténation!
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Je cherche à stocker la date selon son type dans la table "project" dans laquel j'ai créer deux colonnes avec ces deux différents type: proj_dateChar et proj_dateReal.
    Attention c'est une erreur !

    Dans votre table project, vous devez stocker une date dans une colonne de type date.
    Un type de donnée est la 1ere contrainte positionnée sur la donnée, une contrainte inadaptée, et c'est l'assurance de données corrompues.
    Par ailleurs en terme de modélisation, 2 colonnes pour une même donnée, est une faute qui se paiera cher lors des développements.

    Au niveau du code d'import, il faut effectivement en fonction de vos données en entrée gérer la conversion.

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Bonjour skuatamad,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    une colonne de type date
    J'ai fait des tests avec une colone de type date. J'importe mes fichiers dans ma base de donnée, le champs où se situe la date est de type real. Lorsque j'insert mes données dans le champs de type date de ma table project, j'ai donc un problème de gestion des types.

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Je ne connais pas bien postgresql pour vous guider sur l'implémentation.

    Ce que je veux dire c'est:
    Au lieu de tester le type de donnée pour stocker l'information dans une ou l'autre colonne, il est préférable de tester le type de donnée pour faire l'opération de conversion adéquate : reel->date ou text->date.

    Votre table project gagnera en cohérence avec une seule colonne de type date.

  6. #6
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Ah ok en effet je peux tourner mon test de cette manière. Sachant que de toute manière je convertis mes autres données sous un type approprié, cela est une bonne solution.
    Merci

  7. #7
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par aurelie.guegan.15 Voir le message
    Bonjour skuatamad,
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

Discussions similaires

  1. Requête SQL avec function MAX() sur une date
    Par mehdiyou1985 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 03/12/2012, 21h52
  2. requête SQL avec paramètre en vb avec base de donnée SQL srv
    Par dialydany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 01/02/2005, 10h33
  3. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52
  4. [CR 7] [débutante] pb avec if then else
    Par xs_nady dans le forum Formules
    Réponses: 8
    Dernier message: 28/05/2004, 15h36
  5. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37

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