在oracle中修改其中的某个单元格后,表中的行被锁定

时间:2011-10-03 10:22:11

标签: .net oracle plsql

我在oracle过程中有以下代码,它将游标(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;

从oracle调用程序时,一切都运行正常。

但是当从.Net应用程序调用该过程时,会引发错误ORA-24338: statement handle not executed

经过大量测试后,我发现如果从lower(u.token) = lower(p_IV)语句中删除其中一行[{1}}或从SELECT语句中删除u.token = NULL,,那么返回到.Net应用程序没有任何错误。

1 个答案:

答案 0 :(得分:0)

当您尝试获取尚未打开的游标时,通常会引发ORA-24338

例如,如果您的过程在OPEN语句之前引发异常,则可以引发此问题。之后当你尝试从游标中获取oracle会引发ORA-24338,因为游标从未打开过。

您的PL / SQL中是否有EXCEPTION块(例如WHEN OTHERS),或者您是否在.net中捕获了SQL异常?