Ungewöhnliches Problem mit der TO_NUMBER-Funktion in Oracle

Beim Ausführen der Funktion to_number in der where-Klausel in einer varchar2-Spalte ist ein zeitweiliges Problem aufgetreten, wenn die Anzahl der Datensätze eine bestimmte Anzahl von n überschreitet. Ich habe n verwendet, da es keine genaue Anzahl von Datensätzen gibt, auf denen es vorkommt. Auf einer DB passiert es, wenn n auf einer anderen 1 Million war, als es 0,1 war. Million

Z.B. Ich habe eine Tabelle mit 10 Millionen Datensätzen, sagen wir Tabelle Land, die Feld1 Varchar2 enthält numerische Daten und ID

Wenn ich eine Abfrage als Beispiel mache

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

Das funktionier

Aber wenn ich die Abfrage mache

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

Es schlägt fehl, ungültige Nummer zu sagen

Next Ich versuche die Abfrage

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

Es funktioniert wieder <, / p>

Als ich nur eine ungültige Nummer bekam, war das verwirrend, aber in der Protokolldatei stand

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

Es scheint mit der SGA-Größe zu tun zu haben, aber Google hat mir nicht viel geholfen.

Hat jemand eine Idee zu diesem Problem mit TO_NUMBER oder Oracle-Funktionen für große Datenmengen?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage