0

这是我的带有 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;

提前致谢。

4

0 回答 0