sql >> Base de Datos >  >> RDS >> Mysql

START TRANSACTION dentro del contexto BEGIN ... END o fuera y sintaxis LOOP

  1. No:las declaraciones compuestas solo se pueden usar dentro del cuerpo de los programas almacenados.

  2. START TRANSACTION; y COMMIT; son declaraciones separadas. Si desea que el cuerpo de un programa almacenado contenga varias sentencias, deberá encerrar esas sentencias en algún tipo de bloque de sentencias compuestas como BEGIN ... END (que es similar a encerrar un bloque de sentencias entre llaves { ... } dentro de un lenguaje similar a C).

    Dicho esto, podrías tener un programa almacenado que contiene solo la declaración única START TRANSACTION; o COMMIT; —dicho programa no requeriría ningún bloque de instrucciones compuestas y simplemente comenzaría una nueva / confirmaría la transacción actual respectivamente.

    Fuera de un programa almacenado, donde no se permiten bloques de sentencias compuestas, puede ejecutar START TRANSACTION; y COMMIT; declaraciones como y cuando sea necesario.

  3. LOOP también es un bloque de instrucciones compuesto, que solo es válido dentro de un procedimiento almacenado. No es necesario para encerrar un LOOP bloque dentro de un BEGIN ... END bloque, aunque es habitual (ya que de lo contrario es difícil realizar cualquier inicialización de bucle necesaria).

En su caso, donde aparentemente desea insertar datos en una tabla desde una construcción en bucle, deberá:

  • define un programa almacenado en el que usas LOOP;

  • iterar un bucle en un programa externo que ejecuta consultas de base de datos en cada iteración; o

  • redefina su lógica en términos de conjuntos sobre los cuales SQL puede operar directamente.