2017-07-25 22 views
0

table1的[email protected]ORA-01722無效的數字雖然類型應匹配

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 [email protected]

Name    Null Type   
---------------- ---- ------------- 
SEGMENT_CRM   VARCHAR2(150) 
BAN_KEY    VARCHAR2(32) 

表3 evkuzmin_b2b_churn_ban_segment

Name  Null Type   
----------- ---- ------------- 
BAN_KEY   NUMBER(9)  
CLIENT_NAME  VARCHAR2(300) 
CLIENT_INN  VARCHAR2(40) 
SEGMENT_CRM  VARCHAR2(150) 

我的查詢。在這裏,我加入ban_key的前兩個表格,並將結果插入第三個表格。類型匹配,但我仍然得到錯誤。爲什麼?

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 [email protected] 
    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, [email protected] b 
WHERE a.ban_key = b.ban_key; 
+0

尋找在[email protected]_key非數字數據:'選擇 t2.ban_key FROM [email protected] T2 WHERE 1 = 1 AND REGEXP_LIKE(t2.ban_key,'[^ [:digit:]]');' –

回答

0

你在evkuzmin_b2b_churn_ban_segment ban_key(表3)是比較其他兩個表(VARCHAR)的編號。

您a.ban_key是數量和b.ban_key是VARCHAR

+0

在'evkuzmin_b2b_churn_ban_segment'中,ban_key是數字。我從'fct_nc_crm_dims'中取出它也是數字。但在'stg_acrm_ban_attr'中,它是varchar。我試圖做'a.ban_key = TO_NUMBER(b.ban_key);',但得到了同樣的錯誤。 – Evgenii

+0

錯誤似乎被拋出 - WHERE a.ban_key = b.ban_key; –

+0

您的a.ban_key是數字,而b.ban_key是varchar –