Потому что выполнение операции в блоке занимает
несколько циклов ПЛК, а WHILE охватывает
один цикл.
Я бы рекомендовал вам начать с
простого кода (см.
пример работы с СУБД и документацию на библиотеку CmpSysExec) и потом
постепенно дорабатывать его.
Если останутся вопросы - давайте их обсудим в телеграм.
P.S. - в данном конкретном случае всё становится некорректным в момент помещения вызова блока в WHILE, но на будущее:
размещение в соседних строках вызова с xExecute := FALSE и xExecute := TRUE не имеет смысла - вы будете постоянно перезапускать блок, не давая ему нормально работать.