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?