233@REMOTE_DB.RESULT_COUNT
是varchar2
字段,大多数是数字。
只有7行数据包含空格或其他字符,
我通过
找到了这7行SELECT * FROM 233@REMOTE_DB WHERE REGEXP_LIKE(RESULT_COUNT, '[^0-9]')
WITH TABLE_233 as (
select *
from 233@REMOTE_DB where
RESULT_COUNT IS NOT NULL
),
NON_NUMERIC_FILTER_233 AS (
select ID, comment, LAST_UPDATED, TO_NUMBER(RESULT_COUNT) AS
RESULT_COUNT_NUM
from TABLE_233 where id NOT IN (
'11',
'22',
'33',
'44',
'55',
'66',
'77'
)
),
NON_NUMERIC_FILTER_233_LARGER_THAN_ONE AS (
select * from NON_NUMERIC_FILTER_233 where RESULT_COUNT_NUM > 0
and lower(comment) in ('s','t','m','n','p','i','p','o','s','u')
)
select a.* from NON_NUMERIC_FILTER_233_LARGER_THAN_ONE a inner join
234@REMOTE_DB r1 on
a.ID = r1.id
返回
ORA-01722:无效的号码
ORA-02063:[dblink名称]的前一行
01722. 00000 - "无效的号码"
*原因:指定的号码无效 *操作:指定有效数字。
WITH TABLE_233 as (
select *
from 233@REMOTE_DB where
RESULT_COUNT IS NOT NULL
),
NON_NUMERIC_FILTER_233 AS (
select ID, comment, LAST_UPDATED, TO_NUMBER(RESULT_COUNT) AS
RESULT_COUNT_NUM
from TABLE_233 where id NOT IN (
'11',
'22',
'33',
'44',
'55',
'66',
'77'
)
),
NON_NUMERIC_FILTER_233_LARGER_THAN_ONE AS (
select * from NON_NUMERIC_FILTER_233 where RESULT_COUNT_NUM > 0
and lower(comment) in ('s','t','m','n','p','i','p','o s','u')
)
select a.* from NON_NUMERIC_FILTER_233_LARGER_THAN_ONE a
成功
为什么内部联接会导致错误的数字'?
答案 0 :(得分:0)
尝试将字符串转换为数字失败,因为字符串不是有效的数字文字
您可以更改您的SQL,例如ID不在数字列表中:
where id NOT IN (
11,
22,
33,
44,
55,
66,
77
)
如果问题是varchar列的数量,您可以创建own tonumber函数并将其用作:
创建或替换函数tonumeric(v在varchar2中)返回数字为
num number;
开始
num:= to_number(v);
return num;
例外
当别人那么
返回null;
端;