У меня периодически возникала проблема при выполнении функции to_number в предложении where в столбце varchar2, если число записей превышает определенное число n. Я использовал, так как нет точного числа записей, по которым это происходит. На одной БД это происходит после того, как n было 1 миллион, на другой, когда он был 0,1. млн.
например. У меня есть таблица с 10 миллионами записей, скажем, Страна таблицы, в которой field1 varchar2 содержит числовые данные и Id
Если я сделаю запрос в качестве примера
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 или oracle для больших данных?