Недавно я был назначен на унаследованный проект, в котором в качестве базы данных используется Oracle, а в качестве уровня службы - phpСуществует класс DB.php, который обрабатывает выполнение базы данных. Он содержит функцию connect (), которая подключается к базе данных. Внутри этого соединения, кроме порождения нового соединения, он также вызывает две дополнительные функции, которые выполняют что-то вроде -
ALTER SESSION SET NLS_DATE_FORMAT = <something>
ALTER SESSION SET NLS_SORT = <something>
Проблема в том, что эти две функции явно фиксируют транзакции в БД сразу после ALTERingСЕССИЯ. Это имеет побочный эффект, при котором любая транзакция до подключения также будет зафиксирована.
Обычно мы не фиксируем запросы sql до конца запроса, после проверки правильности всех проверок.
Кроме того, в любом стеке вызовов есть несколько мест, где DB.phpсоздается экземпляр и вызывается connect. В php, при вызове oci_connect с теми же параметрами, он вернет то же соединение, если оно уже существует. Поэтому в некоторых случаях эта функция подключения выполняет транзакции, которые не должны быть зафиксированы.
Я пытался обойти эту проблему, но мои обходные пути являются избыточным решением проблемы. Мой вопрос на самом деле таков: Нужно ли делать коммит после ИЗМЕНЕНИЯ СЕССИЙ в php-> oracle?
Потратил очень много времени, исправляя его другими способами иКроме того, я попытался найти это в Интернете и не нашел ответа, где этот сценарий commit принимается во внимание. Любая помощь будет принята с благодарностью.