Oracle ORA-01722类型应匹配但编号无效
表1 dwh.fct\U nc\U crm_dims@etl4Oracle 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
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:][])代码>