在运行时打开时,光标偶尔会丢失数据

时间:2013-03-22 02:20:13

标签: oracle stored-procedures oracle10g cursor

这是我的SELECT语句的光标,它始终返回正确的结果。但是当我在一个过程中使用它时,它有时会得到错误的结果(只返回一行)。

此问题出现频率很高(每1000次过程调用约5-10次)。也许这是oracle 10gR2的已知问题或我的程序中的一些缺点。

我希望我能理解为什么会发生这种情况并获得更好的解决方案,因为我每天都会接到5000个程序调用。

这是我在程序中声明的游标:

CURSOR cur_result (var_num NUMBER)
    IS
        SELECT
            m_username,
            m_password
        FROM
            M_USERS
        WHERE
            m_status   = 1
        AND rownum    <= var_num;

这是我的程序正文:

p_num:=5;

-- the IF statement for guarantee the SELECT statement always
-- get more rows than p_num

LOCK TABLE M_USERS IN EXCLUSIVE MODE;
OPEN cur_result (p_num);
LOOP
    FETCH
            cur_result 
        INTO
            p_username,
            p_password;
    -- the problems here: only 1 row is queried
    --                    the LOOP will exit after second time fetch
    IF (cur_result%NOTFOUND AND (cur_result%ROWCOUNT < p_num) ) THEN
        iserror    := 1;
        EXIT;
    END IF;


    EXIT WHEN cur_result%NOTFOUND;

    UPDATE
            M_USERS
        SET
            m_status = 2
        WHERE
                m_username = p_username
            AND m_password = p_password;
END LOOP;

CLOSE cur_result;

提前致谢。

0 个答案:

没有答案