Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/04/2011, 06h08   #1
Futur Membre du Club
 
Inscription : décembre 2009
Messages : 105
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 105
Points : 17
Points : 17
Par défaut Problème dans ma fonction

Bonjour à tous,

J'ai un problème dans mon for: pouvez vous le régler svp? (je suis débutant en sql: et c'est la première fois que je fais une boucle for en sql...

Le problème se situe au niveau de Update Historique SET Hit_or_miss="true";

Explication du trigger
Au début j'ai historique(FilmID,SouscriID,UtilisID)que j'ai remplis
Puis j'ajoute une colonne hit_or_miss qui est un boolean. Ce boolean renvoie true sosu certaine condition et false dans dautre. Et ce trigger va essayer de mettre à jour la colonne hit_or_miss

Code :
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
CREATE OR REPLACE FUNCTION functionHit_or_miss_version()
returns  TRIGGER AS
$$
DECLARE 
i record;
hit_or_miss BOOLEAN;
BEGIN
FOR i IN SELECT FilmID FROM historique 
LOOP
IF (SELECT GenreID FROM definieSur WHERE definieSur.GenreID IN (SELECT genreID FROM caracteriser))
THEN 
UPDATE Historique SET hit_or_miss="true";
ELSE 
UPDATE Historique SET hit_or_miss="false";
END IF;
RETURN Next i;
END LOOP;
RETURN;
END;
$$
LANGUAGE 'plpgsql';
 
 
CREATE TRIGGER INSERTIONHistorique
AFTER INSERT  ON Historique
FOR each statement 
execute procedure functionHit_or_miss_version();
Merci d'avance
bsangoku est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 09h49   #2
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
hit_or_miss est'il une colonne de votre table historique
car vous la définissez comme variable au début du script?

De même vous mettez à jour la table entière historique! sans filtrer sur FilmdID...


Détaillez votre erreur...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/04/2011, 12h51   #3
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 667
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 667
Points : 8 715
Points : 8 715
Dans cette discussion, vous semblez travailler sous SQL Server.

Le trigger serait dans ce cas :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TRIGGER monTrigger
	ON maTable
	AFTER INSERT
AS
BEGIN
	UPDATE		historique
	SET		hit_or_miss = CASE WHEN DS.GenreId IS NULL THEN 'True' ELSE 'False' END
	FROM		historique AS H
	LEFT JOIN	definieSur AS DS ON ???
	LEFT JOIN	caracteriser AS C ON C.genreID = DS.genreID
	INNER JOIN	inserted AS I ON I.cle_primaire = H.cle_primaire
END
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 09/04/2011, 17h07   #4
Modérateur
 
Inscription : octobre 2008
Messages : 1 505
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 505
Points : 2 034
Points : 2 034
Citation:
Envoyé par elsuket Voir le message
Dans cette discussion, vous semblez travailler sous SQL Server.
Non il s'agit de postgresql, c'est pourquoi il y a une fonction et un CREATE TRIGGER séparés.
Le RETURN NEXT i dans la fonction est une erreur car cette construction est réservée aux fonctions qui retournent un ensemble de tuples (SETOF quelquechose) ce qui n'est pas le cas des fonctions utilisables en TRIGGER.
Du coup la boucle FOR elle-même n'a pas de sens et pour ma part je ne saisis pas du tout la logique de ce bout de code.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h24.


 
 
 
 
Partenaires

Hébergement Web