Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

START TRANSACTION dentro do contexto BEGIN ... END ou fora da sintaxe LOOP


  1. Não:instruções compostas só podem ser usadas dentro do corpo de programas armazenados.

  2. START TRANSACTION; e COMMIT; são declarações separadas. Se você quiser que o corpo de um programa armazenado contenha várias instruções, ele precisará incluir essas instruções em algum tipo de bloco de instruções composto, como BEGIN ... END (que é semelhante a colocar um bloco de instruções entre chaves { ... } dentro de uma linguagem semelhante a C).

    Dito isso, você poderia tem um programa armazenado que contém apenas a instrução única START TRANSACTION; ou COMMIT; — tal programa não exigiria nenhum bloco de instrução composto e apenas iniciaria um novo / confirmaria a transação atual, respectivamente.

    Fora de um programa armazenado, onde blocos de instruções compostas não são permitidos, você pode emitir START TRANSACTION; e COMMIT; declarações como e quando necessário.

  3. LOOP também é um bloco de instrução composto, que só é válido em um procedimento armazenado. Não é necessário para incluir um LOOP bloco dentro de um BEGIN ... END bloco, embora seja usual (caso contrário, é difícil executar qualquer inicialização de loop necessária).

No seu caso, onde você aparentemente deseja inserir dados em uma tabela de uma construção de loop, você precisará:

  • defina um programa armazenado no qual você usa LOOP;

  • itere um loop em um programa externo que executa consultas de banco de dados em cada iteração; ou

  • redefina sua lógica em termos de conjuntos sobre os quais o SQL pode operar diretamente.