Организация блокировки записи Oracle из PHP

alekprog

Новичок
Организация блокировки записи Oracle из PHP

Вопрос 1: Не пойму как заблокировать запись если выполнение скрипта приводит к фиксации транзакции
Вопрос 2: Как определить что запись заблокированна и вернуть код ошибки например рассмотрим следующий код
PHP:
 $conn = ora_logon('sample_schema@sample_db','sample_password');
          $error_yes = @ora_do($conn,"select sample_field
                                                             from sample_table
                                                          where sample_field='1' 
                                                          for update nowait")
          if(error_yes === false)
          {
             echo ora_error($conn);
          }
В идеале хотелось бы чтобы функция ora_do сразу(как например при ошибочном запросе) вызвала ошибку ORA-00054 и вернула ее в ora_error и все было бы замечательно, но браузер зависает до окончания макс. времени выполнения скрипта либо до освобождения записи
и что самое удивительное, что функция ora_do выполняется с ошибкой, но ora_error
возвращает ORA-00000 что соответствует успешному выполнению запроса.

Может я чтото не так понимаю в WEB программировании (сам прикладной программист БД)
Очень прошу помогите либо подскажите где можно почитать про ORACLE и PHP
 

Falc

Новичок
alekprog
Для начала я бы рекомендовал использовать OCI:
http://ru.php.net/manual/en/ref.oci8.php

Если я выполняю в pl/sql запрос:
Select * From dual For Update Nowait
не фиксируя транзакции, то при выполнении такого же запроса на PHP, мне выдает ORA-00054.

Если же необходимо заблокировать запись между разными http-запросами, то боюсь придется отказатся от такой идеи.
 

alekprog

Новичок
Мдя обнадеживающий ответ ни чего не скажешь(это про конец). А вот таблица dual конечному пользователю боюсь без надобности при использовании пользовательских таблиц увы ошибка ORA-00054 не формируется (запрос представлен) и функция не возвращает мгновенно управление как это подразумевает спецификация nowait
На счет OCI полностью согласен функционал и сравнивать нечего, но это отдельная тема уже пережованная на многих форумах при запуске apache ругается благим матом что не может загрузить oci_8i.dll, ora.dll a oracle.dll загружается нормально
 

Falc

Новичок
alekprog
В "Если я выполняю в pl/sql запрос"
Я имел ввиду pl/sql developer, просто описался.

Таблицу dual я привел для простоты, думаю что с любой другой таблицей будет тоже самое.

Проблема в том, что по выполнению скрипта ссесия закрывается (если не использовать plogon) и транзакция комитится => блокировка снимается.

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

alekprog

Новичок
про pl/sql developer я догадался и сам блокировку ставил там, а непонимание судя по всему возникло потому что вы используйте OCI а я описал ORA видимо у OCI с этим все впоряде. А при запуске apache с включенными oci.dll и oci_8i.dll выдает 6 ошибок собственно не найдена точка входа в процедуру OCIStmtPrepare2 в библиотеке OCI.dll и не найдена библиотека MSVCR71.dll(и так еще два раза) Про первую хоть более менее понятно про вторую воще кресты и библиотеки такой нет на компе
 

Falc

Новичок
C OCI.dll ничем помоч не могу.

Может стоит задуматся о переходе на *NIX.
 

alekprog

Новичок
Все может быть ну ладно спасибо за помощь
Буду ждать мож еще кто расскажет про блокирование
 
Сверху