|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre habitué
![]() Inscription : mai 2006 Messages : 233 ![]() |
Bonjour tout le monde;
Je n'ai pas compris ce qui se passe! J'ai un trigger MDF_VEHICULE et je veux le désactiver lors de l'exédution d'une procédure stocké P puis je le réactive à la fin. Dans le corps de P, j'écris : Code :
mais si j'exécute la requête Code :
J'ai essayé de déboguer la procédure stockée dans EMS et je trouve qu'à la ligne : EXECUTE STATEMENT :STMT; il déclenche une erreur me disant qu'il est impossible de préparer la query car le statement est vide Code :
__________________
Deux personnes n'apprennent pas, un arrogant et un timide. |
||||||
|
|
00
|
|
|
#2 | ||
|
Membre habitué
![]() Inscription : mai 2006 Messages : 233 ![]() |
Je l'ai trouvé après une nuit blanche
![]() Il suffit de faire suspend après l'exécution du statement; je ne sais pas pourquoi; Code :
__________________
Deux personnes n'apprennent pas, un arrogant et un timide. |
||
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Inscription : mai 2006 Messages : 233 ![]() |
En réalité rien n'est résolut;
Le "suspend" faisait le rôle de "exit" de la procédure stockée sans exécuter les lignes après.
__________________
Deux personnes n'apprennent pas, un arrogant et un timide. |
|
|
00
|
|
|
#4 | ||
![]() ![]() Serge GirardDéveloppeur informatique Inscription : janvier 2007 Messages : 4 207 ![]() |
Bonjour , essayez avec COMMIT plutôt que suspend ;
perso , j'ai toujours utiliser la méthode Code :
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous |
||
|
|
00
|
|
|
#5 | ||
|
Membre régulier
![]() André Langlet Inscription : avril 2010 Messages : 45 ![]() |
Bonjour,
Il me semble que la méthode consistant à activer/désactiver des triggers de cette façon devrait être réservée à quelques cas particuliers, car elle ne peut être pratiquée que par le SYSDBA ou le propriétaire de la base. De plus elle n'est pas sans danger en environnement multi-utilisateurs. Quand c'est nécessaire, je préfère utiliser un variable d'environnement par exemple: Code :
L'utilisateur n'a ainsi pas besoin de droits particuliers et lui seul est concerné par cette modification dans l'exécution d'un trigger. André |
||
|
|
00
|
|
|
#6 | ||
|
Membre habitué
![]() Inscription : mai 2006 Messages : 233 ![]() |
Merci Sergio;
Même ta méthode ne marche pas cad : Code :
Alors pour le commit à la place de suspend pour André, je n'ai pas compris comment utiliser les variables, où est ce que je précise le nom du trigger à désactiver?
__________________
Deux personnes n'apprennent pas, un arrogant et un timide. |
||
|
|
00
|
|
|
#7 | ||
![]() ![]() Serge GirardDéveloppeur informatique Inscription : janvier 2007 Messages : 4 207 ![]() |
Citation:
Nota : un SUSPEND est pour renvoyer des résultats Citation:
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous |
||
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Inscription : mai 2006 Messages : 233 ![]() |
Mais je l'ai essayé avant de le dire
__________________
Deux personnes n'apprennent pas, un arrogant et un timide. |
|
|
00
|
|
|
#9 | |
|
Membre régulier
![]() André Langlet Inscription : avril 2010 Messages : 45 ![]() |
Citation:
2- Ce n'est pas la variable elle même qui active ou désactive un trigger, mais en testant sa valeur ou son existence dans le code du trigger on peut définir quelle partie du code sera ou non exécutée. André |
|
|
|
00
|
|
|
#10 | |
|
Membre habitué
![]() Inscription : mai 2006 Messages : 233 ![]() |
Voila ce que m'a dit l'équipe Firebird :
Citation:
__________________
Deux personnes n'apprennent pas, un arrogant et un timide. |
|
|
|
00
|
|
|
#11 |
|
Membre habitué
![]() Inscription : mai 2006 Messages : 233 ![]() |
Une très bonne solution pour réaliser ce que je voulais faire c'est l'utilisation des variable comme a proposé André (merci pour lui). Au début de la PS j'écris :
Code :
RDB$SET_CONTEXT(''USER_SESSION'',''PROCEDURE'',1); .... Code :
... RDB$SET_CONTEXT(''USER_SESSION'',''PROCEDURE'',0); Code :
IF (rdb$get_context(''USER_SESSION'', ''PROCEDURE'')=0) THEN INSERT INTO JOURNAL ("UTILISATEUR","DATE","TIME") ...............
__________________
Deux personnes n'apprennent pas, un arrogant et un timide. |
|
|
00
|
|
|
#12 |
|
Membre régulier
![]() André Langlet Inscription : avril 2010 Messages : 45 ![]() |
Cà m'étonnerai que çà marche correctement comme cela.
La variable contextuelle est une chaîne de caractères. Tester sur l'existence de la valeur "0" dans le trigger, implique que la procédure ait au moins été exécutée une fois avant pour placer cette valeur. C'est bien pour çà que dans mes messages précédents, je mets la variable à NULL en fin de procédure, et que je parle de tester "l'existence" dans le trigger. Il n'est dans ce cas pas indispensable de mettre cette valeur dans le contexte de la session, celui de la transaction est suffisant et plus sûr en cas de problème au cours de l'exécution. André |
|
|
00
|
|
|
#13 | |
|
Membre habitué
![]() Inscription : mai 2006 Messages : 233 ![]() |
Je te rassure que ça marche très bien;
Citation:
__________________
Deux personnes n'apprennent pas, un arrogant et un timide. |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com