2015-04-14 19 views
1

我運行一個簡單的插入到選擇和我的代碼是SQL錯誤:ORA-12899:溢出插入空在30字符列

Insert into TEMP 
select a.emp_name, 
     Null as address, 
     a.emp_id, 
     ....... 
     from Temp1 a,Temp2 b where a.batch_id=b.batch_id 

現在列地址是VARCHAR2(30),即使我將空值 。我得到了溢出。

SQL Error: ORA-12899: value too large for column "TEMP"."ADDRESS" (actual: 35, maximum: 30)

真的很疑惑這是怎麼發生的。任何人都可以提供任何提示?我使用Oracle 11g

+0

而不是空的,你可以嘗試使用空字符串「」 –

+1

我想象你在不同的順序在表列中的值。這是你應該作爲插入的部分指定列的原因之一。爲了驗證,可以將表添加說明的問題? –

回答

2

你可能只是把錯誤的值代入列,因爲你還沒有插入子句中指定它們。這是更好地明確地列出字段,而不是依靠他們出現在數據字典的順序:

insert into TEMP (emp_name, address, empi_id, ...) 
select a.emp_name, 
    null, 
    a.emp_id, 
    ....... 
from Temp1 a 
join Temp2 b on a.batch_id=b.batch_id 

我也改爲明確的連接語法,雖然這是不相關的問題...

+0

感謝亞歷克斯,是我爲了得到它洗牌導致的捕撈數據mismatch.Thanks –