PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : Général » Erreur sur Trigger - Delete » 28/11/2012 16:28:51

Oh la honte ... j'avais pas pensé à ça ^^

Merci :-)

#2 Re : Général » Erreur sur Trigger - Delete » 28/11/2012 15:18:37

Voila les scripts de création. On a pour chaque table défini au part avant des séquences d'incrémentations.


create table PANIER (
   ID_PANIER            INT               default nextval('id_panier_seq') NOT NULL,
   ID_CLIENT            INT                 not null,
   PRIX_TOTAL_TTC       DECIMAL              not null,
   PRIX_TOTAL_HT        DECIMAL              not null,
   constraint PK_PANIER primary key (ID_PANIER)
);


create table PERSONNE (
   ID_PERSONNE          INT               default nextval('id_personne_seq') NOT NULL,
   PSEUDO               VARCHAR(50)          not null,
   MDP                  VARCHAR(50)          not null,
   PRENOM               VARCHAR(50)          not null,
   NOM                  VARCHAR(50)          not null,
   EMAIL                VARCHAR(50)          not null,
   TEL_PORTABLE         VARCHAR(13)          null,
   TEL_FIXE             VARCHAR(13)          null,
   ADRESSE              VARCHAR(50)          null,
   CP                   VARCHAR(5)           null,
   VILLE                VARCHAR(50)          null,
   PAYS                 VARCHAR(50)          null,
   DERNIERE_CONNEXION   DATE                 null,
   CONFIRME             BOOL                 not null,
   ABONNE               BOOL                 not null,
   ADMIN                BOOL                 not null,
   constraint PK_PERSONNE primary key (ID_PERSONNE),
   constraint UQ_PSEUDO_PERSONNE unique (PSEUDO),
   constraint UQ_IDENTITE_PERSONNE unique (PRENOM, NOM, ADRESSE, CP, VILLE, PAYS)
);


alter table PANIER
   add constraint FK_PANIER_CLIENT foreign key (ID_CLIENT)
      references PERSONNE (ID_PERSONNE)
      on delete cascade on update cascade;



Voila. On a également un index sur id_client, id_panier de la table Panier, et id_personne, pseudo de la table Personne.

#3 Général » Erreur sur Trigger - Delete » 28/11/2012 12:45:44

Titou_74
Réponses : 4

Bonjour,

Je suis étudiant en DUT informatique et je réalise avec d'autre personne, un projet pour une entreprise de production audiovisuelle. Nous devons lui créer un site commercial.

Notre base de donnée est constitué de 12 tables. Notre problème porte sur 2 table spécifique :
- La table personne, dans laquel est enregistré les informations sur les compte utilisateur.
- La table panier, lié à la table personne par une FK sur id_personne.

Un premier trigger permet de créer un panier lorsque l'on crée un client. Ce trigger fonctionne correctement.

Un second trigger permet de supprimer le panier lorsque l'on supprimer une personne. C'est ce trigger qui pose problème.

Voici le code :


CREATE TRIGGER tr_supprimerPersonne BEFORE DELETE ON personne
FOR EACH ROW
EXECUTE PROCEDURE supprimePersonne();


CREATE OR REPLACE FUNCTION supprimePersonne() RETURNS TRIGGER AS
'
DECLARE
    cPanier CURSOR FOR
        select id_client
        from panier
        where id_client = old.id_personne;
BEGIN   
    IF cPanier%FOUND = TRUE THEN
        DELETE FROM panier
        WHERE id_client = old.id_personne;
    END IF;
RETURN null;
END;
'
LANGUAGE 'plpgsql';




L'erreur renvoyé par pgAdmin III est la suivante :
ERREUR:  l'opérateur n'existe pas : refcursor % boolean
LINE 1: SELECT cPanier%FOUND = TRUE
                      ^
HINT:  Aucun opérateur ne correspond au nom donné et aux types d'arguments.
Vous devez ajouter des conversions explicites de type.
QUERY:  SELECT cPanier%FOUND = TRUE
CONTEXT:  PL/pgSQL function supprimepersonne() line 11 at IF



On est dessus depuis 4 heures et on a pas trouver de correction. Avez vous une idée ?

Pied de page des forums

Propulsé par FluxBB