sql >> Database >  >> RDS >> Mysql

Het aanroepen van een procedure binnen een functie genereert MySQL ERROR 1422

Er zijn een aantal instructies die een impliciete commit veroorzaken, en geen van deze kan worden gebruikt binnen een opgeslagen functie of een trigger, of in een opgeslagen procedure die wordt aangeroepen vanuit een opgeslagen functie of trigger, want dat is niet echt anders in zijn netto-effect.

Even nadenken verklaart de reden hiervoor:opgeslagen functies (en triggers) worden uitgevoerd terwijl een query wordt uitgevoerd . Ze beginnen altijd, zonder uitzondering, met uitvoeren nadat de query is gestart en eindigen met uitvoeren voordat de query is voltooid. Ze kunnen ook meerdere keren worden uitgevoerd tijdens de uitvoering van een enkele zoekopdracht, vooral wanneer de zoekopdracht meerdere rijen omvat.

In dat licht zou het geen zin hebben als het mogelijk zou zijn om COMMIT een transactie terwijl een enkele zoekopdracht wordt uitgevoerd... en dat is wat START TRANSACTION doet, als een transactie wordt uitgevoerd -- het begaat impliciet de huidige transactie en begint een nieuwe.

Dit is prima in een opgeslagen procedure, zolang je het niet aanroept in het midden van een andere query (via een opgeslagen functie of trigger, wat de enige manier is om een ​​procedure aan te roepen in het midden van een andere query) maar doet wat wat u hier doet, wordt niet ondersteund... zelfs als er geen transactie wordt uitgevoerd, is het nog steeds niet mogelijk om een ​​transactie te starten tijdens een actieve zoekopdracht.

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




  1. Retourneer alleen rijen waarvan de maximale waarde kleiner is dan opgegeven

  2. Hoe maak ik een SQL-query die in een bepaald percentagebereik is gegroepeerd?

  3. SUM() Functie in MariaDB

  4. Nummers verwijderen uit string in mysql