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 :

[pl/pgsql] Débutant - Script de remplissage d'une table


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Par défaut [pl/pgsql] Débutant - Script de remplissage d'une table
    Bonjour à tous,

    Je suis débutant en PostgreSQL et en pl/pgsql... Je travail actuellement sur un projet ERP Web, je m'occupe de la base de donnée principalement. En ce moment j'essaye donc de faire migrer certaines données de l'ancienne base (qui est sous Access...) vers la nouvelle sous Postegre. J'ai donc exporté ma table client venant d'Access dans ma nouvelle base, et j'essaye de faire un script pour récupérer ces données.

    Je suis passé par beaucoup d'erreurs mais la je bloque vraiment, je ne sais plus trop quoi essayer... Alors je viens vous demandez un peu d'aide histoire de voir si ma requette est complètement à coté de la plaque ou pas.

    Voici le code :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
    CREATE OR REPLACE FUNCTION alim_client() RETURNS void AS 
    $func$
    DECLARE
    	r "Client_transfert"%ROWTYPE;
    	c INT := 1;
     
    BEGIN 
    	FOR r IN SELECT "Code Client", "Nom Client Fact", "Contact", "Adr Fact", "CP Fact", 
    	"Ville Fact", "Pays Fact", "Fr - CE - Export Fact", "Tel1 Fact", 
    	"Tel2 Fact", "Fax Fact", "E-Mail Fact", "Adresse Internet Fact", 
    	"Nom Client Liv", "Contact Liv", "Adr Liv", "CP Liv", "Ville Liv", 
    	"Pays Liv", "FR - CE - Export Liv", "Tel1 Liv", "Tel2 Liv", "Fax Liv", 
    	"E-Mail Liv", "Adresse Internet Liv", "Remise Client", "Modedepaiement", 
    	"Délais de paiement", "Représentant", "Type_client", "Code Banque", 
    	"Code Guichet", "Num Compte", "Clé RIB", "Nom Banque", "IBAN1", 
    	"IBAN2", "BIC", "Titulaire du Compte", "SIREN", "TVA Intracommunautaire", 
    	"Liste Rouge", "Liste Noire", "Commentaire", "TotalPointFidelite" FROM "Client_transfert" LOOP
     
    			IF "r.Contact" =! NULL THEN
    				INSERT INTO t_contact (id_client, nom_contact) VALUES (c, "Contact");
    			END IF;		
    			IF "r.Contact Fact" =! NULL THEN
    				INSERT INTO t_contact (id_client, nom_contact) VALUES (c, "Contact Fact");
    			END IF;
     
    			IF "r.Type_client" = "Club" THEN
    				INSERT INTO t_client (id_representant) VALUES ('2');
    			ELSE IF "r.Type_client" = "MAGASIN" THEN
    				INSERT INTO t_client (id_representant) VALUES ('1');
    			ELSE IF "r.Type_client" = "SPONSOR" THEN
    				INSERT INTO t_client (id_representant) VALUES ('3');
    			END IF;
     
    			IF "r.Délais de paiement" = "30 j Fin de Mois" THEN
    				INSERT INTO t_client (id_delais_paiement) VALUES ('1');
    			ELSE IF "r.Délais de paiement" = "30 j Fin de Mois le 10" THEN
    				INSERT INTO t_client (id_delais_paiement) VALUES ('2');
    			ELSE IF "r.Délais de paiement" = "30 j net" THEN
    				INSERT INTO t_client (id_delais_paiement) VALUES ('3');
    			ELSE IF "r.Délais de paiement" = "60 j Fin de Mois" THEN
    				INSERT INTO t_client (id_delais_paiement) VALUES ('4');
    			ELSE IF "r.Délais de paiement" = "60 j net" THEN
    				INSERT INTO t_client (id_delais_paiement) VALUES ('5');
    			ELSE IF "r.Délais de paiement" = "90 j Fin de Mois le 10" THEN
    				INSERT INTO t_client (id_delais_paiement) VALUES ('6');
    			ELSE IF "r.Délais de paiement" = "Comptant" THEN
    				INSERT INTO t_client (id_delais_paiement) VALUES ('7');
    			ELSE IF "r.Délais de paiement" = "Contre-rembours." THEN
    				INSERT INTO t_client (id_delais_paiement) VALUES ('8');
    			ELSE IF "r.Délais de paiement" = "D avance" THEN
    				INSERT INTO t_client (id_delais_paiement) VALUES ('9');
    			END IF;
     
    			IF "r.modedepaiement" = "Chèque" THEN
    				INSERT INTO t_client (id_mode_paiement) VALUES ('1');
    			ELSE IF "r.modedepaiement" = "Contre-rembours." OR "Contre-remboursement" THEN
    				INSERT INTO t_client (id_mode_paiement) VALUES ('2');
    			ELSE IF "r.modedepaiement" = "Virement" THEN
    				INSERT INTO t_client (id_mode_paiement) VALUES ('3');
    			ELSE IF "r.modedepaiement" = "Espèce" THEN
    				INSERT INTO t_client (id_mode_paiement) VALUES ('4');
    			ELSE IF "r.modedepaiement" = "Effet accepté" THEN
    				INSERT INTO t_client (id_mode_paiement) VALUES ('5');
    			ELSE IF "r.modedepaiement" = "Effet non accepté" THEN
    				INSERT INTO t_client (id_mode_paiement) VALUES ('6');
    			END IF;
     
    			IF "r.Représentant" = "xxxxxx" THEN
    				INSERT INTO t_client (id_representant) VALUES ('2');
    			ELSE IF "r.Représentant" = "xxxxxx" THEN
    				INSERT INTO t_client (id_representant) VALUES ('3');
    			ELSE IF "r.Représentant" = "xxxxxxx" THEN
    				INSERT INTO t_client (id_representant) VALUES ('4');
    			ELSE IF "r.Représentant" = "xxxxxxx" THEN
    				INSERT INTO t_client (id_representant) VALUES ('5');
    			ELSE IF "r.Représentant" = "xxxxxxx" THEN
    				INSERT INTO t_client (id_representant) VALUES ('6');
    			ELSE IF "r.Représentant" = "xxxxxx" THEN
    				INSERT INTO t_client (id_representant) VALUES ('7');
    			ELSE IF "r.Représentant" = "xxxxx" THEN
    				INSERT INTO t_client (id_representant) VALUES ('8');
    			ELSE IF "r.Représentant" = "xxxxxx" THEN
    				INSERT INTO t_client (id_representant) VALUES ('15');
    			ELSE IF "r.Représentant" = "xxxxxxxx" THEN
    				INSERT INTO t_client (id_representant) VALUES ('10');
    			ELSE IF "r.Représentant" = "xxxxxxx" THEN
    				INSERT INTO t_client (id_representant) VALUES ('12');
    			ELSE IF "r.Représentant" = "xxxxxxx" THEN
    				INSERT INTO t_client (id_representant) VALUES ('13');
    			END IF;
     
    			INSERT INTO t_client (
    			nom_f_client, adresse_f_client, cp_f_client, ville_f_client, pays_f_client, 
    			fixe_f_client, mobile_f_client, fax_f_client, email_f_client, site_web_f_client, 
    			nom_l_client, adresse_l_client, cp_l_client, ville_l_client, pays_l_client, 
    			fixe_l_client, mobile_l_client, fax_l_client, email_l_client, site_web_l_client, 
    			liste_rouge_client, pts_fidel_client, siren_client, num_intracomm_client, 
    			chemin_rep_client, remise_client) 
    			VALUES (
    			"r.Nom Client Fact", "r.Adr Fact", "r.CP Fact", "r.Ville Fact", "r.Pays Fact",
    			"r.Tel1 Fact", "r.Tel2 Fact", "r.Fax Fact", "r.E-Mail Fact", "r.Adresse Internet Fact", 
    			"r.Nom Client Liv", "r.Adr Liv", "r.CP Liv", "r.Ville Liv", "r.Pays Liv", "r.Tel1 Liv", "r.Tel2 Liv", "r.Fax Liv", 
    			"r.E-Mail Liv", "r.Adresse Internet Liv", "r.Liste Rouge", "r.Remise Client", "r.TotalPointFidelite", "r.SIREN", "r.TVA Intracommunautaire", "r.Remise Client");
     
    			c := c + 1;
    	END LOOP;
    END;
    $func$ 
    LANGUAGE 'plpgsql';
    Bon je sais que mon script n'est pas très dynamique toussa, mais je cherche quelque chose de simple pour remplir ma base... Et pour l'instant c'est raté...

    Merci d'avance !

    PS: J'espère ne pas avoir oublier d'infos vitales, faites le moi savoir si c'est le cas !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Par défaut
    J'ai oublié le message d'erreur...
    "ERREUR: erreur de syntaxe sur ou près de « LOOP »
    LINE 106: END LOOP;"

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Il y a déjà quelques problèmes de syntaxe

    1) il faut écrire r."nom de champ" au lieu de "r.nom de champ"

    2) IF expression =! NULL devrait être IF expression IS NOT NULL

    3) les chaînes de caractères litérales s'écrivent avec des apostrophes et pas des guillemets, c.a.d que "30 j Fin de Mois" est incorrect, ça devrait être '30 j Fin de Mois'

    Et du point de vue de la logique, tous les INSERT à l'intérieur des IF devraient être semble-t-il remplacés par la simple affectation d'une variable, la véritable insertion se faisant à la fin de la boucle, avec cette variable prise en compte.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Par défaut
    Citation Envoyé par estofilo Voir le message
    Il y a déjà quelques problèmes de syntaxe

    1) il faut écrire r."nom de champ" au lieu de "r.nom de champ"

    2) IF expression =! NULL devrait être IF expression IS NOT NULL

    3) les chaînes de caractères litérales s'écrivent avec des apostrophes et pas des guillemets, c.a.d que "30 j Fin de Mois" est incorrect, ça devrait être '30 j Fin de Mois'

    Et du point de vue de la logique, tous les INSERT à l'intérieur des IF devraient être semble-t-il remplacés par la simple affectation d'une variable, la véritable insertion se faisant à la fin de la boucle, avec cette variable prise en compte.
    Merci pour votre réponse.

    Pour la dernière partie, je sais que je ne fais pas vraiment les INSERTs dans les règles de l'art... Le reste j'ai tout corrigé, mais je me trouve toujours face à la même erreur. Il est possible que ça vienne de ma méthode d'insertion ? C'est bizarre il bloque vraiment à la fin du script sur le "END LOOP" alors que cette construction me parait correcte...

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    il faudrait reposter la version corrigée, car sans le code on ne peut pas dire grand chose sur une erreur de syntaxe.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Par défaut
    Voici le code corriger :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    CREATE OR REPLACE FUNCTION alim_client() RETURNS void AS 
    $func$
    DECLARE
    	r "Client_transfert"%ROWTYPE;
    	c INT := 1;
     
    BEGIN 
    	FOR r IN SELECT "Code Client", "Nom Client Fact", "Contact", "Adr Fact", "CP Fact", 
    	"Ville Fact", "Pays Fact", "Fr - CE - Export Fact", "Tel1 Fact", 
    	"Tel2 Fact", "Fax Fact", "E-Mail Fact", "Adresse Internet Fact", 
    	"Nom Client Liv", "Contact Liv", "Adr Liv", "CP Liv", "Ville Liv", 
    	"Pays Liv", "FR - CE - Export Liv", "Tel1 Liv", "Tel2 Liv", "Fax Liv", 
    	"E-Mail Liv", "Adresse Internet Liv", "Remise Client", "Modedepaiement", 
    	"Délais de paiement", "Représentant", "Type_client", "Code Banque", 
    	"Code Guichet", "Num Compte", "Clé RIB", "Nom Banque", "IBAN1", 
    	"IBAN2", "BIC", "Titulaire du Compte", "SIREN", "TVA Intracommunautaire", 
    	"Liste Rouge", "Liste Noire", "Commentaire", "TotalPointFidelite" FROM "Client_transfert" LOOP
     
    			IF r."Contact" IS NOT NULL THEN
    				INSERT INTO t_contact (id_client, nom_contact) VALUES (c, r."Contact");
    			END IF;		
    			IF r."Contact Liv" IS NOT NULL THEN
    				INSERT INTO t_contact (id_client, nom_contact) VALUES (c, r."Contact Liv");
    			END IF;
     
    			IF r."Type_client" = 'Club' THEN
    				INSERT INTO t_client (id_representant) VALUES ('2');
    			ELSE IF r."Type_client" = 'MAGASIN' THEN
    				INSERT INTO t_client (id_representant) VALUES ('1');
    			ELSE IF r."Type_client" = 'SPONSOR' THEN
    				INSERT INTO t_client (id_representant) VALUES ('3');
    			END IF;
     
    			IF r."Délais de paiement" = '30 j Fin de Mois' THEN
    				INSERT INTO t_client (id_delais_paiement) VALUES ('1');
    			ELSE IF r."Délais de paiement" = '30 j Fin de Mois le 10' THEN
    				INSERT INTO t_client (id_delais_paiement) VALUES ('2');
    			ELSE IF r."Délais de paiement" = '30 j net' THEN
    				INSERT INTO t_client (id_delais_paiement) VALUES ('3');
    			ELSE IF r."Délais de paiement" = '60 j Fin de Mois' THEN
    				INSERT INTO t_client (id_delais_paiement) VALUES ('4');
    			ELSE IF r."Délais de paiement" = '60 j net' THEN
    				INSERT INTO t_client (id_delais_paiement) VALUES ('5');
    			ELSE IF r."Délais de paiement" = '90 j Fin de Mois le 10' THEN
    				INSERT INTO t_client (id_delais_paiement) VALUES ('6');
    			ELSE IF r."Délais de paiement" = 'Comptant' THEN
    				INSERT INTO t_client (id_delais_paiement) VALUES ('7');
    			ELSE IF r."Délais de paiement" = 'Contre-rembours.' THEN
    				INSERT INTO t_client (id_delais_paiement) VALUES ('8');
    			ELSE IF r."Délais de paiement" = 'D avance' THEN
    				INSERT INTO t_client (id_delais_paiement) VALUES ('9');
    			END IF;
     
    			IF r."Modedepaiement" = 'Chèque' THEN
    				INSERT INTO t_client (id_mode_paiement) VALUES ('1');
    			ELSE IF r."Modedepaiement" = 'Contre-rembours.' OR 'Contre-remboursement' THEN
    				INSERT INTO t_client (id_mode_paiement) VALUES ('2');
    			ELSE IF r."Modedepaiement" = 'Virement' THEN
    				INSERT INTO t_client (id_mode_paiement) VALUES ('3');
    			ELSE IF r."Modedepaiement" = 'Espèce' THEN
    				INSERT INTO t_client (id_mode_paiement) VALUES ('4');
    			ELSE IF r."Modedepaiement" = 'Effet accepté' THEN
    				INSERT INTO t_client (id_mode_paiement) VALUES ('5');
    			ELSE IF r."Modedepaiement" = 'Effet non accepté' THEN
    				INSERT INTO t_client (id_mode_paiement) VALUES ('6');
    			END IF;
     
    			IF r."Représentant" = 'xxxxxxx' THEN
    				INSERT INTO t_client (id_representant) VALUES ('2');
    			ELSE IF r."Représentant" = 'xxxxxx' THEN
    				INSERT INTO t_client (id_representant) VALUES ('3');
    			ELSE IF r."Représentant" = 'xxxxxxx' THEN
    				INSERT INTO t_client (id_representant) VALUES ('4');
    			ELSE IF r."Représentant" = 'xxxxxxxx' THEN
    				INSERT INTO t_client (id_representant) VALUES ('5');
    			ELSE IF r."Représentant" = 'xxxxxxx' THEN
    				INSERT INTO t_client (id_representant) VALUES ('6');
    			ELSE IF r."Représentant" = 'xxxxxx' THEN
    				INSERT INTO t_client (id_representant) VALUES ('7');
    			ELSE IF r."Représentant" = 'xxxxxxx' THEN
    				INSERT INTO t_client (id_representant) VALUES ('8');
    			ELSE IF r."Représentant" = 'xxxxxxx' THEN
    				INSERT INTO t_client (id_representant) VALUES ('15');
    			ELSE IF r."Représentant" = 'xxxxx' THEN
    				INSERT INTO t_client (id_representant) VALUES ('10');
    			ELSE IF r."Représentant" = 'xxxxxxx' THEN
    				INSERT INTO t_client (id_representant) VALUES ('12');
    			ELSE IF r."Représentant" = 'xxxxxxx' THEN
    				INSERT INTO t_client (id_representant) VALUES ('13');
    			END IF;
     
    			INSERT INTO t_client (
    			nom_f_client, adresse_f_client, cp_f_client, ville_f_client, pays_f_client, 
    			fixe_f_client, mobile_f_client, fax_f_client, email_f_client, site_web_f_client, 
    			nom_l_client, adresse_l_client, cp_l_client, ville_l_client, pays_l_client, 
    			fixe_l_client, mobile_l_client, fax_l_client, email_l_client, site_web_l_client, 
    			liste_rouge_client, pts_fidel_client, siren_client, num_intracomm_client, 
    			chemin_rep_client, remise_client) 
    			VALUES (
    			r."Nom Client Fact", r."Adr Fact", r."CP Fact", r."Ville Fact", r."Pays Fact",
    			r."Tel1 Fact", r."Tel2 Fact", r."Fax Fact", r."E-Mail Fact", r."Adresse Internet Fact", 
    			r."Nom Client Liv", r."Adr Liv", r."CP Liv", r."Ville Liv", r."Pays Liv", r."Tel1 Liv", r."Tel2 Liv", r."Fax Liv", 
    			r."E-Mail Liv", r."Adresse Internet Liv", r."Liste Rouge", r."Remise Client", r."TotalPointFidelite", r."SIREN", r."TVA Intracommunautaire", r."Remise Client");
     
    			c := c + 1;
    	END LOOP;
    END;
    $func$ 
    LANGUAGE 'plpgsql';
    En supprimant toutes mes boucles IF le code s'exécute donc il y a fort à parier que cela vienne de requettes INSERT...

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

Discussions similaires

  1. Remplissage D'une Table
    Par Maria1505 dans le forum Oracle
    Réponses: 1
    Dernier message: 08/11/2006, 11h30
  2. Générer le script de création d'une table
    Par ztef dans le forum Oracle
    Réponses: 9
    Dernier message: 21/09/2006, 17h45
  3. [débutant] modifier le nom d'une table
    Par banker dans le forum Access
    Réponses: 1
    Dernier message: 08/03/2006, 12h35
  4. [Débutant]Ordre des champs dans une table
    Par goony dans le forum Débuter
    Réponses: 4
    Dernier message: 16/02/2006, 12h05
  5. [PL/SQL] Boucle de remplissage d'une table.
    Par Maglight dans le forum Langage SQL
    Réponses: 1
    Dernier message: 22/12/2005, 16h35

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