Monitor Forum | Start New Thread Start New Thread
RE: Trigger [ Reply ]
By: Nicolas Milleret on 2006-05-15 12:10
[forum:1826]
Mon mail précédent n'étant pas aussi clair que je l'avais prévu, du fait de l'alignement des colonnes, je recommence :
je rappelle qu'un tuple de la table Menu est de la forme : <nom, id_pere, lien, id>
Les quatres menus créés dans la tables sont les suivants :
<menu1, null, null, 4>
<menu2, null, null, 5>
<menu3, null, null, 6>
<menu4, null, null, 7>
Voilà. En espérant que ce mail est plus clair que le précédent

RE: Trigger [ Reply ]
By: Nicolas Milleret on 2006-05-11 20:59
[forum:1813]
Enfin, les triggers sont finis et fonctionnent.
Ils sont opérationnels sur la table tb394546.Menu
J'ai créé les 4 menus :
NOM ID_PERE LIEN ID
menu1 null null 4
menu2 null null 5
menu3 null null 6
menu4 null null 7
on peut créer, supprimer, mettre à jour les items
on peut seulement mettre à jour les menus.

RE: Trigger [ Reply ]
By: Thomas Beurlangey on 2006-05-11 16:20
[forum:1810]
Le trigger doit fixer le nombre à 4 menus, pas plus. il doit vraiment empecher d'en mettre plus, c'est pour que les php-men aient une "sécurité" qui leur empêche de faire des bêtises.

RE: Trigger [ Reply ]
By: Nicolas Milleret on 2006-05-11 15:51
[forum:1809]
J'ai un petit problème... et oui encore!
Voilà, les triggers sont quasiment fait mais 2 choix s'offre à moi pour les finir, et cela dépend de la liberté que l'on laisse aux php-men vis-à-vis des tables de menus.

Soit on fixe le nombre de menus à 4, et ils ne peuvent faire que des update dessus.

Soit on les laisse créer, supprimer et updater comme ils veulent. Mais dans ce cas, s'ils ne respectent pas le nombre de menus prévu, on ne peut rien faire, si ce n'est que de les avertir avec des messages d'erreur minables.

Bien sûr, dans les deux cas, le nombre d'item reste illimité et contrôlé!

En attendant vos avis sur la question...

RE: Trigger [ Reply ]
By: Thomas Beurlangey on 2006-05-10 07:53
[forum:1799]
On verra cela à la réunion
@+

RE: Trigger [ Reply ]
By: Nicolas Milleret on 2006-05-09 21:20
[forum:1798]
Bon g remarqué que mon code précédent était bourré de fautes, je l'ai corrigé mais il reste des erreurs. Le nouveau code est le suivant :

CREATE FUNCTION "TestMenu"() RETURNS pg_trigger AS
$BODY$
DECLARE
NbMenu integer := 0;
BEGIN
IF NEW.id_pere IS NULL THEN
SELECT INTO NbMenu COUNT(*) FROM Menu WHERE id_pere IS NULL;
IF NbMenu<>4 THEN
RAISE NOTICE 'Nombre total de menus non respecté';
RETURN NULL;
END IF;
ELSE
IF NEW.id_pere NOT IN SELECT id FROM Menu THEN
RAISE NOTICE 'Menu père inexistant';
RETURN NULL;
END IF;
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE 'sql' VOLATILE;
ALTER FUNCTION "TestMenu"() OWNER TO nm153952;

Et la première faute est toujours dans le DECLARE. Je ne comprend pas

RE: Trigger [ Reply ]
By: Nicolas Milleret on 2006-05-09 16:29
[forum:1794]
Voilà le code de la fonction :
CREATE FUNCTION "TestMenu"() RETURNS pg_trigger AS
$BODY$
DECLARE
NbMenu INT4;
BEGIN
SELECT INTO NbMenu COUNT(*) FROM Menu WHERE id_pere IS NULL;
IF NbMenu<>4 THEN
RAISE EXCEPTION 'Nombre total de menus non respecté';
END IF;
IF NEW.id_pere NOT IN SELECT id FROM Menu THEN
RAISE EXCEPTION 'Menu père inexistant', NEW.empname;
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE 'sql' VOLATILE;
ALTER FUNCTION "TestMenu"() OWNER TO nm153952;
J'ai trouvé pour le type renvoyé par la fonction, c'est pg_trigger, et non opaque.
Mais ça me dit maintenant qu'il y a une erreur vers le INT4, mais j'ai remarqué que je pouvais toujours mettre ce que je voulais, l'erreur se trouvait toujours vers le 70ème caractère. Alors si quelqu'un voit où est l'erreur...

RE: Trigger [ Reply ]
By: Nicolas Milleret on 2006-05-09 13:50
[forum:1792]
Bon alors finalement, g beaucoup plus de difficultés que prévu...
Tout d'abord, PgAdminIII plante un peu trop souvent depuis tout à l'heure et je sai pa pourquoi, ce qui ralentit mon rendement.
J'ai fai une fonction qui doit faire ce qui est demandé dans nm153952, mais je n'ai pas pu la tester
Et je n'ai pas encore fait le déclencheur mais ça va venir
Le problème, c'est que la fonction doit retourner un truc de type 'opaque'. J'ai cherché sur le net, et ça dit de retourner trigger, ou alors opaque sur les versions antérieures de postgres.
Mais moi, j'ai une erreur disant que la fonction ne peu pa retourner opaque. Et dans la liste, opaque est proposé mais pas trigger.
Est-ce-que quelqu'un pourrait venir aider un étudiant en détresse???
Merci d'avance

Trigger [ Reply ]
By: Thomas Beurlangey on 2006-05-07 20:35
[forum:1763]
Nicolas, voici ce que tu devra faire pour créer le trigger :
_il s'appuiera sur la table menu qui se trouveras dans la base tb394546 sur l305
_le trigger devra contrôler qu'il n'existe pas plus ou moins de 4 tuples qui possèdent un id_pere égal à NULL
_il doit contrôler aussi que les valeurs de l'attribut id_pere correspondent aux valeurs Id de tuples où Id_Pere=NULL.

Enfin, bref, si tu as le moindre problème, contacte moi

FEDER Powered By FusionForge Collaborative Development Environment Charte d'utilisation / Nous contacter / Mentions légales Haut de page