Mysql
 sql >> Base de données >  >> RDS >> Mysql

L'appel d'une procédure à l'intérieur d'une fonction génère MySQL ERROR 1422

Il existe un certain nombre d'instructions qui provoquent une validation implicite, et aucune d'entre elles ne peut être utilisée dans une fonction stockée ou un déclencheur, ou dans une procédure stockée appelée à partir d'une fonction stockée ou d'un déclencheur, parce que ce n'est pas vraiment différent dans son effet net.

Un instant de réflexion en explique la raison :les fonctions stockées (et les déclencheurs) s'exécutent lorsqu'une requête est en cours d'exécution . Ils commencent toujours, sans exception, à s'exécuter après le démarrage de la requête et finissent de s'exécuter avant la fin de la requête. Ils peuvent également s'exécuter plusieurs fois lors de l'exécution d'une seule requête, en particulier lorsque la requête implique plusieurs lignes.

Dans cette optique, cela n'aurait aucun sens s'il était possible de COMMIT une transaction alors qu'une seule requête est en cours d'exécution... et c'est ce que START TRANSACTION fait, si une transaction est en cours d'exécution - elle valide implicitement la transaction en cours et en démarre une nouvelle.

C'est bien dans une procédure stockée, tant que vous ne l'appelez pas au milieu d'une autre requête (via une fonction stockée ou un déclencheur, qui est le seul moyen d'invoquer une procédure au milieu d'une autre requête) mais faites quoi que vous faites ici n'est pas pris en charge... même s'il n'y a pas de transaction en cours d'exécution, il n'est toujours pas possible de démarrer une transaction au milieu d'une requête en cours d'exécution.

http://dev.mysql.com/doc/refman /5.6/fr/implicit-commit.html