MySQL Forums
Forum List  »  French

Re: Récupération d'un numéro auto incrémenté dans un trigger
Posted by: Jean Molliné
Date: December 11, 2013 04:36AM

Oui, j'aurais bien une idée, mais je ne suis pas certain que ce soit une très bnone idée.

J'évite toujours de manipuler moi-même les clés primaires. Là, le cas est particulier et si la procédure stockée génère cette erreur, c'est qu'il doit y avoir un lock sur la ligne tant que le trigger n'a pas terminé son exécution.

Donc la solution que je verrais pour absolument faire ça, ce serait d'en revenir à un trigger BEFORE INSERT. L'idée dans le cas d'une insertion, c'est de vérifier si on a une valeur pour act_action_origine : si ce n'est pas le cas, on crée soi-même la clé primaire de la nouvelle ligne et on affecte cette valeur tant pour la clé primaire que pour l'autre colonne.

Là-non plus, je n'ai pas testé,je manque un peu de temps pour ça, mais le trigger pourrait ressembler à quelque chose comme ceci :

CREATE TRIGGER `action_AINS` AFTER INSERT ON action FOR EACH ROW
BEGIN
  IF(NEW.act_action_origine IS NULL) THEN
    -- On récupère la valeur de la dernière clé primaire de la table;
    SELECT MAX(act_id) INTO @p_act_id FROM action;
    -- On incrémente la valeur récupérée
    SET @p_act_id = @p_act_id + 1;
    -- On assigne la valeur obtenue à la nouvelle clé primaire et à l'autre colonne
    SET NEW.act_id = @p_act_id;
    SET NEW.act_action_origine = @p_act_id;
  END IF;
END

Mais je ne garantis pas du tout que ça fonctionnera.

L'autre option, peut-être beaucoup plus sure, ce serait virer complètement l'idée du trigger : comme on connait toutes les valeurs de la ligne insérée, après l'insertion, on peut récupérer la clé primaire dans une requête SELECT pour récupérer la clé primaire avec, dans les clauses, WHERE des vérifications pour toutes les colonnes avec les valeurs insérées. Partant du résultat, on peut alors lancer une requête UPDATE.

______________________________________________________________
Une question bien formulée, c'est un problème bien compris : ça représente déjà les 3/4 de la réponse ;)

Options: ReplyQuote


Subject
Views
Written By
Posted
Re: Récupération d'un numéro auto incrémenté dans un trigger
1822
December 11, 2013 04:36AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.