Цитата:
Изначально опубликовано dirigente
Я ПРАВДА НЕ ВИЖУ здесь ошибки программирования, как утверждает уважаемый Garic!
Во время транзакции блокируются не только записи в таблицах, но и экстенты сегментов отката. Это такие логические группы блоков данных в механизме журналирования и отката изменений в Oracle. Если Ваша длительная транзакция и еще одна любая транзакция аксапты с записью большого объема данных будут привязаны к одному сегменту отката(такое вполне возможно), то может возникнуть ошибочная ситуация, в результате которой, транзакция с большим кол-вом записываемых данных будет отменена.
Вероятность того, что эта ситуация возникнет, растет с кол-вом таких ляпов в программировании, частотой использования Вашей формы и т.д.
Даже если ситуация, описанная выше, не произойдет - благодаря вашему стилю смешивать presentation и persistent логику, существенно возрастет ресурсопотребление СУБД. Если экстент занят вашей транзакцией долгое время, вместо переиспользования существующих, серверу понадобится производить операции создания новых экстентов, а в последствии их удаления.
Следуя традиции сравнивать аксапту с автомобилями - представьте, как на хорошей скоростной дороге, предназначенной для грамотных автомобилистов с исправными автомобилями, Вы перекрыли полосу движения только потому, что пользуетесь механикой и не умеете переключать скорости.
Цитата:
Изначально опубликовано dirigente
Просто объясните если знаете: ПОЧЕМУ ВОЗНИКАЕТ ОШИБКА?
Точно не знаю, думаю процесс финализации формы происходит по-разному в этих случаях. И при использовании CommandButton OK происходит автоматический коммит.. После чего вы пытаетесь сделать коммит еще раз.. Это предположения, которые проверять абсолютно не хочется - для того, чтобы внутри транзакции работать с логикой верхних уровней - нет никаких оснований кроме лени.