如果記錄數超過特定數n,那麼在varchar2列的where子句中執行to_number函數時,我得到間歇性問題。我使用n,因爲它沒有確切的記錄數量。在一個數據庫中,它發生在n爲100萬而另一個爲0.1時。百萬。Oracle中的TO_NUMBER函數出現奇怪問題
E.g.我有一千萬條記錄表說,表國傢俱有含數字小數據和Id
如果我做一個查詢爲例
select *
from country
where to_number(field1) = 23
and id >1 and id < 100000
這工作
但field1的VARCHAR2,如果我做查詢
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大小,但谷歌並沒有給我很多幫助。
有沒有人有任何關於這個問題與TO_NUMBER或oracle功能的大數據?
可能需要添加一個提示來防止將外部謂詞合併到內聯視圖中。 – 2010-05-07 13:25:16
@Dave:謝謝,沒錯 - 添加 – 2010-05-07 13:52:22