Mysql
 sql >> Datenbank >  >> RDS >> Mysql

START TRANSACTION innerhalb BEGIN ... END Kontext oder außerhalb und LOOP-Syntax

  1. Nein:Zusammengesetzte Anweisungen können nur im Hauptteil von gespeicherten Programmen verwendet werden.

  2. START TRANSACTION; und COMMIT; sind getrennte Erklärungen. Wenn Sie möchten, dass der Hauptteil eines gespeicherten Programms mehrere Anweisungen enthält, muss es diese Anweisungen in eine Art zusammengesetzten Anweisungsblock wie BEGIN ... END einschließen (was dem Einschließen eines Blocks von Anweisungen in geschweifte Klammern ähnelt { ... } innerhalb einer C-ähnlichen Sprache).

    Das heißt, Sie könnten ein gespeichertes Programm haben, das nur die Einzelanweisung START TRANSACTION; enthält oder COMMIT; – Ein solches Programm würde keinen zusammengesetzten Anweisungsblock erfordern und würde lediglich eine neue Transaktion beginnen bzw. die aktuelle Transaktion festschreiben.

    Außerhalb eines gespeicherten Programms, wo zusammengesetzte Anweisungsblöcke nicht erlaubt sind, können Sie START TRANSACTION; eingeben und COMMIT; Anweisungen nach Bedarf.

  3. LOOP ist auch ein zusammengesetzter Anweisungsblock, der nur innerhalb einer gespeicherten Prozedur gültig ist. Es ist nicht notwendig um eine LOOP einzuschließen Block innerhalb eines BEGIN ... END blockieren, obwohl es üblich ist (da es sonst schwierig ist, eine erforderliche Schleifeninitialisierung durchzuführen).

In Ihrem Fall, in dem Sie anscheinend Daten aus einem Schleifenkonstrukt in eine Tabelle einfügen möchten, müssen Sie entweder:

  • Definieren Sie ein gespeichertes Programm, in dem Sie LOOP verwenden;

  • iterieren Sie eine Schleife in einem externen Programm, das Datenbankabfragen bei jeder Iteration ausführt; oder

  • Definieren Sie Ihre Logik in Bezug auf Mengen neu, auf denen SQL direkt operieren kann.