Oracle ORA-01722类型应匹配但编号无效

Oracle ORA-01722类型应匹配但编号无效,oracle,Oracle,表1 dwh.fct\U nc\U crm_dims@etl4 Name Null Type --------------------------- -------- ------------- BAN_KEY NOT NULL NUMBER(9) CLIENT_NAME VARCHAR2(300) CLIENT_INN

表1 dwh.fct\U nc\U crm_dims@etl4

Name                        Null     Type          
--------------------------- -------- ------------- 
BAN_KEY                     NOT NULL NUMBER(9)     
CLIENT_NAME                          VARCHAR2(300) 
CLIENT_INN                           VARCHAR2(40)  
EFFECTIVE_DATE              NOT NULL DATE          
EXPIRATION_DATE                      DATE   
表2 etl.stg_acrm_ban_attr@etl2

Name             Null Type          
---------------- ---- ------------- 
SEGMENT_CRM           VARCHAR2(150) 
BAN_KEY               VARCHAR2(32)  
表3 evkuzmin_b2b_客户群_ban_细分市场

Name        Null Type          
----------- ---- ------------- 
BAN_KEY          NUMBER(9)     
CLIENT_NAME      VARCHAR2(300) 
CLIENT_INN       VARCHAR2(40)  
SEGMENT_CRM      VARCHAR2(150) 
我的问题。在这里,我在ban_键上连接前两个表,并将结果插入到第三个表中。类型匹配,但我仍然得到错误。为什么?

INSERT INTO evkuzmin_b2b_churn_ban_segment
SELECT a.ban_key, a.client_name, a.client_inn, b.segment_crm FROM(
  SELECT ban_key, client_name, client_inn
  FROM(
    SELECT ban_key,client_name, client_inn, 
      ROW_NUMBER() OVER (PARTITION BY ban_key, client_inn ORDER BY effective_date DESC) AS rn
    FROM dwh.fct_nc_crm_dims@etl4 
    WHERE expiration_date >= TO_DATE('01.04.2016','DD.MM.YYYY') OR expiration_date IS NULL --1ST DAY OF REPORTING PERIOD
  )
  WHERE rn = 1
) a, etl.stg_acrm_ban_attr@etl2 b 
WHERE a.ban_key = b.ban_key;

与其他两个表(varchar)相比,evkuzmin\U b2b\U CROUR\U ban\U段(表3)中的ban_键是一个数字


您的a.ban_键是数字,b.ban_键是varchar

evkuzmin_b2b_-courner_-ban_段中
ban_键
是数字。我从
fct\u nc\u crm\u dims
中获取它,它也是数字。但是在
stg\u acrm\u ban\u attr
中,它是varchar。我试着做
a.ban_key=to_NUMBER(b.ban_key),但得到了相同的错误。错误似乎是由-引发的,其中a.ban_key=b.ban_key;您的a.ban_键是number,b.ban_键是varchar看起来像
etl.stg_acrm_-ban_attr@etl2
包含无法转换为数字的字符串。请尝试使用字符(a.ban键)=b.ban_key在etl.stg_acrm_ban中查找非数字数据_attr@etl2.ban_key:
从etl.stg\u acrm\u ban中选择t2.ban\u键_attr@etl2t2,其中1=1和类REGEXP(t2.ban_键,[^[:digit:][])