-
Não:instruções compostas só podem ser usadas dentro do corpo de programas armazenados.
-
START TRANSACTION;
eCOMMIT;
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, comoBEGIN ... 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 únicaSTART TRANSACTION;
ouCOMMIT;
— 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 emitirSTART TRANSACTION;
eCOMMIT;
declarações como e quando necessário.
-
LOOP
também é um bloco de instrução composto, que só é válido em um procedimento armazenado. Não é necessário para incluir umLOOP
bloco dentro de umBEGIN ... 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ê usaLOOP
;
-
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.