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