begin process at 2012 05 26 11:43:07
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

MySQL

 > 

Procédures Stockées

 > 

Besoin d'aide pour trigger dans mysql


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Besoin d'aide pour trigger dans mysql

jeudi 14 janvier 2010 à 11:30:26 | Besoin d'aide pour trigger dans mysql

Darkgattsu

Salut, c'est mon tout premier message sur ce fofo alors qu'il m'aide quasiment au quotidien depuis 2ans ^^. Je suis en prépa IG Analyste Programmeur et je réalise actuellement mon stage de 2eme année.

Alors voici mon problème, j'essaye de créer un trigger before insert sur une bdd mysql, seulement je cherche à annuler l'insertion selon tel ou tel cas.
J'ai lu par ci par la qu'on pouvait utiliser return false (apparemment ça ne marche pas) ou RAISERROR (c'est ce que j'ai laissé ici) pour stopper l'insert.

Voici mon trigger, j'ai vérifié les requêtes au cas où il y aurait une erreur sur les noms de champ, ça ne vient pas de là.

<code>
Delimiter |
Create trigger insert_marche BEFORE INSERT ON marché FOR EACH ROW
BEGIN
If (NEW.IDpdv <>NULL and NEW.IDagence=NULL and NEW.IDportefeuille=NULL) or (NEW.IDpdv=NULL and NEW.IDagence<>NULL and NEW.IDportefeuille=NULL) or (NEW.IDpdv =NULL and NEW.IDagence=NULL and NEW.IDportefeuille<>NULL) then
BEGIN
DECLARE num_agence varchar(5);
Select IDagence FROM pointdevente Where IDagence=NEW.IDagence INTO num_agence;
IF num_agence <> NULL THEN
RAISERROR;
Else
BEGIN
Select IDagence FROM portefeuille Where IDagence=NEW.IDagence INTO num_agence
;
IF num_agence <> NULL THEN
RAISERROR;
Else
Insert into marché(IDagence,IDportefeuille,IDpdv,nommarche) values (NEW.IDagence, NEW.IDportefeuille, NEW.IDpdv, NEW.nommarche) ;
END ;
END ;
Else
RAISERROR;
END|
</code>

voilà l'erreur se produit au niveau du soulignement.
merci d'avance.
dimanche 17 janvier 2010 à 23:33:32 | Re : Besoin d'aide pour trigger dans mysql

Delphiprog

Administrateur CodeS-SourceS
Bonsoir,

Personnellement, je ne me risquerais pas à déclencher des erreurs dans des triggers !!! Ca risque vite de devenir incontrôlable.

D'autre part, le code de ton trigger est censé s'exécuter avant l'insertion d'un enregistrement dans la table marché (un conseil : évites les noms accentués...). Or, dans ce même trigger, tu veux exécuter une commande INSERT !?
Es-tu sûr de bien avoir bien compris l'utilisation des triggers ?
En supposant que ton code puisse fonctionner, alors il déclenchera à son tour le trigger qui essaiera d'insérer, ce qui déclenchera le trigger qui essaiera.... Et patatras, la boucle sans fin !
Revois ton code en le simplifiant et tu verras :
1- tu peux faire bien simple
2- tu peux te passer des 'RaiseError' qui ne sont disponibles que dans les toutes dernières versions de MySQL.

Ce que tu souhaites faire a plus sa place dans une procédure stockée que dans un trigger.

May Delphi be with you

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.

[url=http://www.helpmysql.org/fr/petition]Sauvons My
lundi 18 janvier 2010 à 11:16:58 | Re : Besoin d'aide pour trigger dans mysql

Darkgattsu

Merci d'avoir répondu et vous avez bien raison en parlant de procédures stockées, vu que la plupart de mes insertions vont etre géré par des PS.

Juste pour savoir, comment peut-on stopper l'insertion avec un trigger?
J'ai entendu parlé de rollback et commit mais je n'arrive pas vraiment à les utiliser.

Un résumé rapide sur l'utilisation et la syntaxe du trigger stoppant une insertion serait très appréciée
lundi 18 janvier 2010 à 11:49:54 | Re : Besoin d'aide pour trigger dans mysql

Delphiprog

Administrateur CodeS-SourceS
Réponse acceptée !
Laisse tomber les commit et rollback dans les triggers, tu fais fausse route. Je crois comprendre qu'il y a une grande confusion entre une PS et un trigger dans ton esprit...

Pour les autres questions, je te renvoie vers cet excellent tutoriel : La gestion des erreurs en SQL procédural avec MySQL
par Alain Defrance.
Toutes les réponses s'y trouvent

Que la lumière soit...
May Delphi be with you

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.

[url=http://www.helpmysql.org/fr/petition]Sauvons My


Cette discussion est classée dans : insert, and, trigger, idagence, idpdv


Répondre à ce message

Sujets en rapport avec ce message

Comment annuler un INSERT dans un Trigger ? [ par vladam ] Bonjour, j'ai un trigger suivant :Que dois-je mettre à la place de "-- Annuler l'insert" pour annuler l'insert en cours ?ALTER</ Encore et toujours transaction... [ par Malkuth ] Bijours,Encore des questions sur les transactions !Si j'ai une procedure stocké avec Transaction et qu'elle déclenche un trigger qui utilise un autre Like et condition .. [ par cbu ] Bonjour,Je n'arrive pas à utiliser Like dans mon cas :Where (@pi_Email IS NULL OR Email LIKE ('%' & @pi_Email & '%'))Cela me renvoie :The data types v TRIGGER AFTER / BEFORE [ par vladam ] hello, j'ai un trigger :CREATETRIGGER dbo.IsAuthDeleted </font probleme de trigger sous oracle [ par EmacLi ] Bonjour à tous.Voila, j'ai un petit trigger qui ne fonctionne pas.J'aurais voulu l'avi d'un expert:CREATE OR REPLACE TRIGGER nomTrigger BEFORE INSERT @@identity apres Insertion [ par issoux ] Bonjour,  J'utilise dans une stored procedure trois  Insert . J'ai besoin de l'id du premier insert pour le mettre dans le deuxieme Insert . Mes id so Probleme d'integrité dans une stored avec transaction [ par issoux ] Conflit entre l'instruction INSERT et la contrainte COLUMN FOREIGN KEYVoilà mon erreur : j'ai une transaction que voici (sous sql server 2000) :CREATE Trigger ??? [ par BasicInstinct ] bonjour tout le monde,je cherche à remplacer des caractères parasites à l'insertion ou modification de données effectuées par un programme tierce ( do violation de contraintes unique [ par dark_cross ] CREATE TABLE appareil(        num_vol number(4) PRIMARY KEY,    num_avion NUMBER(4),     nbvolh_mois NUMBER(4),    nbhvol_tot NUMBER(6),    capacite N traduction d'une requtte sql [ par 071714016 ] j'ai un problème avec une version SQL 4.0 il ne reconnait pas "not in (select" "select * from chat where recepteur='$idlogin' and etat_r!=1 and emeteu


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales