存储过程中调用语句与直接执行结果不一致

问题遇到的现象和发生背景

因为数据量过大导致数据文件自增达到上限,需要添加数据文件。但不想每次满了之后再手动添加,所以建了一个bigfile tablespace想把表都迁过去。表也比较多,而且需要保留数据不能删表重建,就打算使用存储过程进行迁移。
在编写完存储过程后,执行发现它没有对任何一张符合条件的数据表进行迁移,甚至for循环都没进去。一再尝试后发现是存储过程中执行的那个查询条件没有查询到数据。
那么问题来了,我将该段查询语句复制出来直接执行是能查到数据的,但在存储过程中却不行。求解惑

代码如下

测试发现,存储过程查询的数据量和直接使用语句查询的存在差异

create PROCEDURE  DBA_TEST
 AS
    E_PARM_ERROR EXCEPTION;
    E_DATE_ERROR EXCEPTION;
    E_TABLESPACE_CYCLE EXCEPTION;

    V_NUM_OF_TABLES NUMBER(10);

BEGIN
    DBMS_OUTPUT.PUT_LINE('[INFO] BEGIN AT ' || TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS'));

    ----------------------------------------------------------------------------
    -- CONVERT TO PARTITION TABLE
    ----------------------------------------------------------------------------
    select count(*) into V_NUM_OF_TABLES from ALL_TABLES;
    DBMS_OUTPUT.PUT_LINE(V_NUM_OF_TABLES);

    V_NUM_OF_TABLES := 0;
   FOR T IN (SELECT distinct owner FROM ALL_TABLES
)
        LOOP
            DBMS_OUTPUT.PUT_LINE(T.OWNER);
            BEGIN
                V_NUM_OF_TABLES := V_NUM_OF_TABLES + 1;
            EXCEPTION
                WHEN OTHERS THEN
                    DBMS_OUTPUT.PUT_LINE('SQLCODE=' || SQLCODE);
                    DBMS_OUTPUT.PUT_LINE('SQLERRM=' || SQLERRM);
                    ROLLBACK;
                    RAISE;
            END;
            COMMIT;
        END LOOP;
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/608064247866128.jpg "#left")

    DBMS_OUTPUT.PUT_LINE('[INFO] TOTAL ' || TO_CHAR(V_NUM_OF_TABLES) || ' TABLES PROCESSED.');
    DBMS_OUTPUT.PUT_LINE('[INFO] END AT ' || TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS'));
END DBA_TEST;
/

运行结果及报错内容

img

img

定位到存储过程中在哪个位置,逻辑没有按预期执行呢?