-
Не:съставните изрази могат да се използват само в тялото на съхранените програми.
-
START TRANSACTION;иCOMMIT;са отделни твърдения. Ако искате тялото на съхранена програма да съдържа множество изрази, то ще трябва да затвори тези изрази в някакъв вид съставен блок на изрази, като напримерBEGIN ... END(което е подобно на затваряне на блок от изрази в скоби{ ... }в C-подобен език).Това каза, че можете имат съхранена програма, която съдържа само едно изявление
START TRANSACTION;илиCOMMIT;—такава програма няма да изисква никакъв съставен блок от оператори и просто ще започне съответно нова/завери текущата транзакция.Извън съхранена програма, където блоковете на съставни изрази не са разрешени, можете да издадете
START TRANSACTION;иCOMMIT;изявления както и когато е необходимо. -
LOOPсъщо е съставен блок на изрази, който е валиден само в рамките на съхранена процедура. Не е необходимо за да приложитеLOOPблок вBEGIN ... ENDблок, въпреки че е обичайно (тъй като в противен случай е трудно да се извърши необходимата инициализация на цикъл).
Във вашия случай, когато очевидно искате да вмъкнете данни в таблица от циклична конструкция, ще трябва или да:
-
дефинирайте съхранена програма, в която използвате
LOOP; -
повторете цикъл във външна програма, която изпълнява заявки към база данни при всяка итерация; или
-
предефинирайте вашата логика по отношение на набори, върху които SQL може директно да работи.