Очередь транзакций Oracle с использованием функции PHP oci_pconnect в веб-сервисе - PullRequest
2 голосов
/ 30 июня 2009

Я написал веб-сервис с использованием классов PHP SOAP. Он имеет функции для возврата данных XML из базы данных Oracle или для выполнения вставки / обновления / удаления базы данных.

Однако в данный момент используется Autocommit, поэтому любая операция выполняется немедленно.

Я смотрю, как поставить в очередь транзакции, а затем зафиксировать весь лот только тогда, когда пользователь нажимает кнопку «Сохранить». У меня трудности с выяснением, возможно ли это. Я не могу легко поддерживать согласованное соединение, поскольку, конечно, веб-сервис вызывается для отдельных операций.

Я пытался использовать функцию PHP oci_pconnect, но даже когда я подключаюсь каждый раз с одними и теми же параметрами, сессия, похоже, заканчивается, и мои изменения не фиксируются, когда я наконец вызываю oci_commit.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 30 июня 2009

Повторное использование одного и того же незафиксированного сеанса базы данных между запросами PHP невозможно. У вас нет возможности заблокировать пользователя в процессах PHP или подключении к БД, так как веб-сервер произвольно отправит запрос любому из них. Поэтому вы не можете хранить незафиксированные данные в сеансе Oracle между запросами.

Лучший способ сделать это действительно зависит от ваших требований. У меня такое ощущение, что вам нужно какое-то хранилище сеансов (возможно, таблицу базы данных с ключом user_id), которое может содержать все ожидающие транзакции между запросами. Когда пользователь нажимает «Сохранить», извлеките все ожидающие запросы и вставьте их в окончательную таблицу назначения, а затем подтвердите.

Альтернативой может быть вставка всех транзакций с флагом, который говорит, что они еще не завершены. После нажатия кнопки «Сохранить» обновите флаг, чтобы сообщить, что он завершен.

В любом случае, вам нужно где-то разместить ожидающие запросы, пока не будет нажата эта кнопка сохранения.

0 голосов
/ 05 декабря 2013

DBMS_XA позволяет вам обмениваться транзакциями между сеансами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...