Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 28/11/2012 12:45:44
- Titou_74
- Membre
Erreur sur Trigger - Delete
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 ?
Dernière modification par Titou_74 (28/11/2012 12:45:59)
Hors ligne
#2 28/11/2012 15:05:48
- flo
- Membre
Re : Erreur sur Trigger - Delete
Pourriez-vous donner la définition précise des 2 tables (les ordres de création par exemple) ?
Hors ligne
#3 28/11/2012 15:18:37
- Titou_74
- Membre
Re : Erreur sur Trigger - Delete
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.
Hors ligne
#4 28/11/2012 15:52:51
- gleu
- Administrateur
Re : Erreur sur Trigger - Delete
Vous utilisez déjà la clause "ON DELETE CASCADE", donc votre trigger ne sert à rien.
Guillaume.
Hors ligne
#5 28/11/2012 16:28:51
- Titou_74
- Membre
Re : Erreur sur Trigger - Delete
Oh la honte ... j'avais pas pensé à ça ^^
Merci :-)
Hors ligne
Pages : 1