我在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应用程序没有任何错误。
答案 0 :(得分:0)
当您尝试获取尚未打开的游标时,通常会引发ORA-24338
。
例如,如果您的过程在OPEN语句之前引发异常,则可以引发此问题。之后当你尝试从游标中获取oracle会引发ORA-24338
,因为游标从未打开过。
您的PL / SQL中是否有EXCEPTION
块(例如WHEN OTHERS
),或者您是否在.net
中捕获了SQL异常?