Странная проблема с функцией TO_NUMBER в Oracle

У меня периодически возникала проблема при выполнении функции to_number в предложении where в столбце varchar2, если число записей превышает определенное число n. Я использовал, так как нет точного числа записей, по которым это происходит. На одной БД это происходит после того, как n было 1 миллион, на другой, когда он был 0,1. млн.

Например. У меня есть таблица с 10 миллионами записей, скажем, Страна таблицы, в которой field1 varchar2 содержит числовые данные и идентификатор

Если я сделаю запрос в качестве примера

select * 
from country 
where to_number(field1) = 23
and id >1 and id < 100000

Это работает

Но если я сделаю запрос

select * 
from country 
where to_number(field1) = 23 
and id >1 and id < 100001

Неверно сказано неверный номер

Далее я попробую запрос

select * 
from country
where to_number(field1) = 23 
and id >2 and id < 100001

Опять работает

Поскольку я получил только неправильный номер, это сбивало с толку, но в лог-файле сказано

Memory Notification: Library Cache Object loaded into SGA
Heap size 3823K exceeds notification threshold (2048K)
KGL object name :with sqlplan as (
    select c006 object_owner, c007 object_type,c008 object_name
      from htmldb_collections
     where COLLECTION_NAME='HTMLDB_QUERY_PLAN'
       and c007 in ('TABLE','INDEX','MATERIALIZED VIEW','INDEX (UNIQUE)')),
ws_schemas as(
    select schema 
      from wwv_flow_company_schemas
     where security_group_id = :flow_security_group_id),
t as(
        select s.object_owner table_owner,s.object_name table_name,
               d.OBJECT_ID
          from sqlplan s,sys.dba_objects d

Кажется, это связано с размером SGA, но Google не помог мне в этом.

Кто-нибудь имеет представление об этой проблеме с функциями TO_NUMBER или оракула для больших данных?

Ответы на вопрос(4)

Ваш ответ на вопрос