У меня тоже была эта проблема. Простой «gradlew clean» и «gradlew build» сделали трюк.
Нажмите Build-> Clean Project и выполнит очистку gradle
Ошибка возникает в самом начале вашей процедуры в выражении
START TRANSACTION;
Как и в документации говорится:
Новая транзакция запускается автоматически после завершения транзакции с использованием этих команд, поэтому отдельной команды
blockquote>START TRANSACTION
не существует.Это должно ответить на ваш первый вопрос.
Что касается второго, когда вы находитесь в ветви исключений, вы фактически откатили субтранзакцию, которая началась с
BEGIN
, который принадлежит предложениюEXCEPTION
(или после последнегоCOMMIT
). Вы все еще в транзакции, поэтому вы можете выдатьCOMMIT
иROLLBACK
.К твоему третьему вопросу: нет, нет способа зафиксировать все до последнего исключения & rdquo ;. Вы можете получить это, только обернув каждый оператор в блок
BEGIN ... EXCEPTION ... END
, но это серьезно ухудшит вашу производительность (не считая код нечитабельным).Используйте
BEGIN ... EXCEPTION ... END
блоков разумно, когда вы ожидаете, что оператор может потерпеть неудачу.