sql >> Database teknologi >  >> RDS >> Mysql

Kaldning af en procedure inde i en funktion kaster MySQL ERROR 1422

Der er en række udsagn, der forårsager en implicit commit, og ingen af ​​disse kan bruges i en lagret funktion eller en trigger, eller i en lagret procedure, der kaldes fra en lagret funktion eller trigger, fordi det egentlig ikke er anderledes i sin nettoeffekt.

Et øjebliks refleksion forklarer årsagen til dette:lagrede funktioner (og triggere) udføres mens en forespørgsel kører . De begynder altid, uden undtagelse, at udføre efter forespørgslen starter, og afslutter eksekveringen før forespørgslen slutter. De kan også køre flere gange under udførelsen af ​​en enkelt forespørgsel, især når forespørgslen involverer flere rækker.

I det lys ville det ikke give mening, hvis det var muligt at COMMIT en transaktion mens en enkelt forespørgsel kører... og det er hvad START TRANSACTION gør, hvis en transaktion kører -- forpligter den implicit den aktuelle transaktion og starter en ny.

Dette er fint i en lagret procedure, så længe du ikke kalder den midt i en anden forespørgsel (via en lagret funktion eller trigger, som er den eneste måde at påkalde en procedure midt i en anden forespørgsel), men gør hvad du gør her er ikke understøttet... selvom der ikke er en transaktion kørende, er det stadig ikke muligt at starte en transaktion midt i en kørende forespørgsel.

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




  1. Kan ikke oprette forbindelse til localhost, men kan med computernavn i SQL Server 2008

  2. mariadb Regexp returnerer engang tom i lagret procedure

  3. Kunne ikke oprette forbindelse til MySQL på localhost:3306 med brugerrod

  4. Hvad er den bedste måde at generere rang i MYSQL?