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

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Points : 9
    Points
    9
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Points : 9
    Points
    9
    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 émérite
    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
    Points : 2 890
    Points
    2 890
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Points : 9
    Points
    9
    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 émérite
    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
    Points : 2 890
    Points
    2 890
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Points : 9
    Points
    9
    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...

  7. #7
    Membre émérite
    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
    Points : 2 890
    Points
    2 890
    Par défaut
    Il y a aussi cette ligne qui ne va pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ELSE IF r."Modedepaiement" = 'Contre-rembours.' OR 'Contre-remboursement' THEN
    il faut écrire soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     variable  in ('valeur1', 'valeur2')
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     variable='valeur1' OR variable='valeur2'

  8. #8
    Membre émérite
    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
    Points : 2 890
    Points
    2 890
    Par défaut
    Autre chose: le fait de fermer une cascade de IF-THEN-ELSE avec un seul END IF n'est possible que quand ELSIF en un seul mot est employé et non pas "ELSE IF" en deux mots. ELSE IF est possible aussi mais dans ce cas, il faudrait autant de END IF que de IF, ce qui n'est pas le cas dans ton code.
    Je pense que remplacer les ELSE IF par ELSIF résolvera ton erreur de syntaxe.

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par estofilo Voir le message
    Il y a aussi cette ligne qui ne va pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ELSE IF r."Modedepaiement" = 'Contre-rembours.' OR 'Contre-remboursement' THEN
    il faut écrire soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     variable  in ('valeur1', 'valeur2')
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     variable='valeur1' OR variable='valeur2'
    Merci, je viens de corriger. Mais j'ai encore et toujours le même erreur... J'ai essayé d'exécuter qu'une partie du code et bizarrement ça passe sans erreur. J'ai enlevé toutes les boucles IF sauf les 2 premières c'est à dire les 2 boucles avec le "IS NOT NULL".

    Voilà ce que j'ai actuellement, j'ai tenté de rajouter la commande "EXECUTE" devant chaque requette.

    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
    				EXECUTE 'INSERT INTO t_contact (id_client, nom_contact) VALUES (' || c, r."Contact" ||')';
    			END IF;		
     
    			IF r."Contact Liv" IS NOT NULL THEN
    				EXECUTE 'INSERT INTO t_contact (id_client, nom_contact) VALUES (' || c, r."Contact Liv" ||')';
    			END IF;
     
    			IF r."Type_client" = 'Club' THEN
    				EXECUTE 'INSERT INTO t_client (id_representant) VALUES (''2'')';
    			ELSE IF r."Type_client" = 'MAGASIN' THEN
    				EXECUTE 'INSERT INTO t_client (id_representant) VALUES (''1'')';
    			ELSE IF r."Type_client" = 'SPONSOR' THEN
    				EXECUTE 'INSERT INTO t_client (id_representant) VALUES (''3'')';
    			END IF;
     
    			IF r."Délais de paiement" = '30 j Fin de Mois' THEN
    				EXECUTE 'INSERT INTO t_client (id_delais_paiement) VALUES (''1'')';
    			ELSE IF r."Délais de paiement" = '30 j Fin de Mois le 10' THEN
    				EXECUTE 'INSERT INTO t_client (id_delais_paiement) VALUES (''2'')';
    			ELSE IF r."Délais de paiement" = '30 j net' THEN
    				EXECUTE 'INSERT INTO t_client (id_delais_paiement) VALUES (''3'')';
    			ELSE IF r."Délais de paiement" = '60 j Fin de Mois' THEN
    				EXECUTE 'INSERT INTO t_client (id_delais_paiement) VALUES (''4'')';
    			ELSE IF r."Délais de paiement" = '60 j net' THEN
    				EXECUTE 'INSERT INTO t_client (id_delais_paiement) VALUES (''5'')';
    			ELSE IF r."Délais de paiement" = '90 j Fin de Mois le 10' THEN
    				EXECUTE 'INSERT INTO t_client (id_delais_paiement) VALUES (''6'')';
    			ELSE IF r."Délais de paiement" = 'Comptant' THEN
    				EXECUTE 'INSERT INTO t_client (id_delais_paiement) VALUES (''7'')';
    			ELSE IF r."Délais de paiement" = 'Contre-rembours.' THEN
    				EXECUTE 'INSERT INTO t_client (id_delais_paiement) VALUES (''8'')';
    			ELSE IF r."Délais de paiement" = 'D avance' THEN
    				EXECUTE 'INSERT INTO t_client (id_delais_paiement) VALUES (''9'')';
    			END IF;
     
    			IF r."Modedepaiement" = 'Chèque' THEN
    				EXECUTE 'INSERT INTO t_client (id_mode_paiement) VALUES (''1'')';
    			ELSE IF r."Modedepaiement" = 'Contre-rembours.' OR r."Modedepaiement" = 'Contre-remboursement' THEN
    				EXECUTE 'INSERT INTO t_client (id_mode_paiement) VALUES (''2'')';
    			ELSE IF r."Modedepaiement" = 'Virement' THEN
    				EXECUTE 'INSERT INTO t_client (id_mode_paiement) VALUES (''3'')';
    			ELSE IF r."Modedepaiement" = 'Espèce' THEN
    				EXECUTE 'INSERT INTO t_client (id_mode_paiement) VALUES (''4'')';
    			ELSE IF r."Modedepaiement" = 'Effet accepté' THEN
    				EXECUTE 'INSERT INTO t_client (id_mode_paiement) VALUES (''5'')';
    			ELSE IF r."Modedepaiement" = 'Effet non accepté' THEN
    				EXECUTE 'INSERT INTO t_client (id_mode_paiement) VALUES (''6'')';
    			END IF;
     
    			IF r."Représentant" = 'xxxxx' THEN
    				EXECUTE 'INSERT INTO t_client (id_representant) VALUES (''2'')';
    			ELSE IF r."Représentant" = 'xxxxxx' THEN
    				EXECUTE 'INSERT INTO t_client (id_representant) VALUES (''3'')';
    			ELSE IF r."Représentant" = 'xxxxxx' THEN
    				EXECUTE 'INSERT INTO t_client (id_representant) VALUES (''4'')';
    			ELSE IF r."Représentant" = 'xxxxxx' THEN
    				EXECUTE 'INSERT INTO t_client (id_representant) VALUES (''5'')';
    			ELSE IF r."Représentant" = 'xxxxx' THEN
    				EXECUTE 'INSERT INTO t_client (id_representant) VALUES (''6'')';
    			ELSE IF r."Représentant" = 'xxxxx' THEN
    				EXECUTE 'INSERT INTO t_client (id_representant) VALUES (''7'')';
    			ELSE IF r."Représentant" = 'xxxxxx' THEN
    				EXECUTE 'INSERT INTO t_client (id_representant) VALUES (''8'')';
    			ELSE IF r."Représentant" = 'xxxxxx' THEN
    				EXECUTE 'INSERT INTO t_client (id_representant) VALUES (''15'')';
    			ELSE IF r."Représentant" = 'xxxxxx' THEN
    				EXECUTE 'INSERT INTO t_client (id_representant) VALUES (''10'')';
    			ELSE IF r."Représentant" = 'xxxxxx' THEN
    				EXECUTE 'INSERT INTO t_client (id_representant) VALUES (''12'')';
    			ELSE IF r."Représentant" = 'xxxxxx' THEN
    				EXECUTE 'INSERT INTO t_client (id_representant) VALUES (''13'')';
    			END IF;
     
    			EXECUTE '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';
    Encore merci pour ton aide...

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par estofilo Voir le message
    Autre chose: le fait de fermer une cascade de IF-THEN-ELSE avec un seul END IF n'est possible que quand ELSIF en un seul mot est employé et non pas "ELSE IF" en deux mots. ELSE IF est possible aussi mais dans ce cas, il faudrait autant de END IF que de IF, ce qui n'est pas le cas dans ton code.
    Je pense que remplacer les ELSE IF par ELSIF résolvera ton erreur de syntaxe.
    Ah oui bien vu je n'avais pas penser à ça... Je vais essayer !

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par estofilo Voir le message
    Autre chose: le fait de fermer une cascade de IF-THEN-ELSE avec un seul END IF n'est possible que quand ELSIF en un seul mot est employé et non pas "ELSE IF" en deux mots. ELSE IF est possible aussi mais dans ce cas, il faudrait autant de END IF que de IF, ce qui n'est pas le cas dans ton code.
    Je pense que remplacer les ELSE IF par ELSIF résolvera ton erreur de syntaxe.
    Bingo j'ai plus d'erreur... Je pensais pas que c'était une erreur aussi bête, j'ai pas du tout fait attention à mon ELSE IF vu que mon pgAdmin reconnaissait le mot clé... Enfin en tous cas un grand merci !

    Je testerais mieux exécution de script demain.

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Voilà, j'ai pas mal bossé dessus et j'ai réussi à faire ce que je voulais.

    Voici la dernière version de mon script :

    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
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    CREATE OR REPLACE FUNCTION alim_client() RETURNS void AS 
    $func$
    DECLARE
    	r "Client_transfert"%ROWTYPE;
    	c INT := 0;
    	listerouge BOOLEAN;
    	idrepres INT;
    	iddelais INT;
    	idmode INT;
    	idtype INT;
    	titurib VARCHAR;
    	codebanque VARCHAR;
    	codeguichet VARCHAR;
    	numcompte VARCHAR;
    	clerib VARCHAR;
    	iban VARCHAR;
    	bic VARCHAR;
    	nombanque VARCHAR;
     
    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 %", "Mode de paiement", 
    	"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
     
    			--Sélection liste rouge client
    			IF r."Liste Rouge" = '1' THEN
    				listerouge := 1;
    			ELSE
    				listerouge := 0;
    			END IF;
     
    			--Sélection type client
    			IF r."Type Client" = 'Club' THEN
    				idtype := 2;
    			ELSEIF r."Type Client" = 'MAGASIN' THEN
    				idtype := 1;
    			ELSEIF r."Type Client" = 'SPONSOR' THEN
    				idtype := 3;
    			END IF;
     
    			--Sélection délais paiement
    			IF r."Délais de paiement" = '30 j Fin de Mois' THEN
    				iddelais := 1;
    			ELSEIF r."Délais de paiement" = '30 j Fin de Mois le 10' THEN
    				iddelais := 2;
    			ELSEIF r."Délais de paiement" = '30 j net' THEN
    				iddelais := 3;
    			ELSEIF r."Délais de paiement" = '60 j Fin de Mois' THEN
    				iddelais := 4;
    			ELSEIF r."Délais de paiement" = '60 j net' THEN
    				iddelais := 5;
    			ELSEIF r."Délais de paiement" = '90 j Fin de Mois le 10' THEN
    				iddelais := 6;
    			ELSEIF r."Délais de paiement" = 'Comptant' THEN
    				iddelais := 7;
    			ELSEIF r."Délais de paiement" = 'Contre-rembours.' THEN
    				iddelais := 8;
    			ELSEIF r."Délais de paiement" = 'D avance' THEN
    				iddelais := 9;
    			END IF;
     
    			--Sélection mode de paiement
    			IF r."Mode de paiement" = 'Chèque' THEN
    				idmode := 1;
    			ELSEIF r."Mode de paiement" = 'Contre-rembours.' OR r."Mode de paiement" = 'Contre-remboursement' THEN
    				idmode := 2;
    			ELSEIF r."Mode de paiement" = 'Virement' THEN
    				idmode := 3;
    			ELSEIF r."Mode de paiement" = 'Espèce' THEN
    				idmode := 4;
    			ELSEIF r."Mode de paiement" = 'Effet accepté' THEN
    				idmode := 5;
    			ELSEIF r."Mode de paiement" = 'Effet non accepté' THEN
    				idmode := 6;
    			END IF;
     
    			--Sélection représentants
    			IF r."Représentant" = 'xxxxxxxxx' THEN
    				idrepres := 2;
    			ELSEIF r."Représentant" = 'xxxxxxxx' THEN
    				idrepres := 3;
    			ELSEIF r."Représentant" = 'xxxxxx' THEN
    				idrepres := 4;
    			ELSEIF r."Représentant" = 'xxxxxxxx' THEN
    				idrepres := 5;
    			ELSEIF r."Représentant" = 'xxxxxxxx' THEN
    				idrepres := 6;
    			ELSEIF r."Représentant" = 'xxxxxxx' THEN
    				idrepres := 7;
    			ELSEIF r."Représentant" = 'xxxxxxx' THEN
    				idrepres := 8;
    			ELSEIF r."Représentant" = 'xxxxxxx' THEN
    				idrepres := 15;
    			ELSEIF r."Représentant" = 'xxxxxxxxx' THEN
    				idrepres := 10;
    			ELSEIF r."Représentant" = 'xxxxxxx' THEN
    				idrepres := 12;
    			ELSEIF r."Représentant" = 'xxxxxxxx' THEN
    				idrepres := 13;
    			END IF;
     
    			--informations bancaires
    			titurib := r."Titulaire du Compte";
    			codebanque := r."Code Banque";
    			codeguichet := r."Code Guichet";
    			numcompte := r."Num Compte";
    			clerib := r."Clé RIB";
    			nombanque := r."Nom Banque";
    			iban := r."IBAN1" || r."IBAN2";
    			bic := r."BIC";
     
    			--insertion dans la table client
    			INSERT INTO t_client(
                id_type_client, id_delais_paiement, id_mode_paiement, 
                id_representant, 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, remise_client)
    			VALUES (idtype, iddelais, idmode, idrepres, 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", listerouge, r."TotalPointFidelite", r."SIREN", r."TVA Intracommunautaire", r."Remise Client %");
     
    			--Récupération de l'ID du dernier client inséré
    			c := currval('t_client_id_client_seq');
     
    			--insertion des contacts
    			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;
     
    			--insertion infos banquaires
     
    			IF r."Num Compte" IS NOT NULL OR r."IBAN1" IS NOT NULL OR r."IBAN2"IS NOT NULL OR r."Nom Banque" IS NOT NULL THEN
    				INSERT INTO t_rib(
    				id_client, titulaire_rib, code_banque_rib, 
    				code_guichet_rib, num_compte_rib, cle_rib_rib, iban_rib, bic_rib, nom_banque_rib)
    				VALUES (c, titurib, codebanque, codeguichet, numcompte, clerib, iban, bic, nombanque);
    			END IF;
     
    	END LOOP;
    END;
    $func$ 
    LANGUAGE 'plpgsql';

+ 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