Строка в таблице блокируется после изменения в ней определенной ячейки в Oracle - PullRequest
2 голосов
/ 03 октября 2011

У меня есть следующий код в процедуре оракула, который возвращает курсор (r_cursor) в качестве OUT параметра

SELECT userid
      INTO v_userid
      FROM users u
     WHERE lower(u.email) = lower(p_email)
       AND lower(u.token) = lower(p_IV);

UPDATE users u
   SET u.token = NULL,
       u.lastlogin = sysdate()
 WHERE u.userid = v_userid;

  OPEN r_cursor FOR
    SELECT u.firstname,
           u.lastname
      FROM users u
     WHERE u.userid = v_userid;

При вызове процедуры из оракула все работает отлично.

Но при вызове процедуры из приложения .Net возникает ошибка ORA-24338: statement handle not executed.

После многих испытаний я обнаружил, что если я удаляю одну из строк lower(u.token) = lower(p_IV) из оператора SELECT или u.token = NULL, из оператора UPDATE, курсор возвращается в приложение .Net без любая ошибка.

1 Ответ

0 голосов
/ 03 октября 2011

ORA-24338 обычно поднимается, когда вы пытаетесь получить курсор, который еще не был открыт.

Это может быть вызвано, например, если ваша процедура вызвала исключение перед оператором OPEN. Впоследствии при попытке извлечь из курсора оракул выдаст ORA-24338, так как курсор никогда не был открыт.

У вас есть блок EXCEPTION (например, WHEN OTHERS) в вашем PL / SQL или вы ловите исключение SQL в .net?

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