2014-02-28 44 views
0

我有兩列,我需要將數據從列VISITSAUTHORIZED複製到NEWVISITS,當我使用下面的命令複製數據時,我收到一條錯誤消息「invalid number」。任何人都可以糾正這個?將數據從varchar2複製到同一個表中的數字

VISITSAUTHORIZED VARCHAR2(10) 
NEWVISITS   NUMBER(8) 
SQL> update patientinsurance set NEWVISITS=VISITSAUTHORIZED ; 
ERROR at line 1: 
ORA-01722: invalid number 
+0

這意味着你的'VISITSAUTHORIZED'表中的值不是有效的數字。可能輸入組或(不正確)小數點分隔符,但可以是任何東西。你可以添加一個值的樣本,看看這是否可以用數字格式掩碼解決嗎? –

回答

1

這取決於您在舊欄中的數據類型。如果所有的格式一致,那麼你可能能夠做到:

update patientinsurance 
set newvisits = to_number(visitsauthorized, '<format model>') 

但它聽起來更可能是你有什麼不容易對付。 (將數據存儲爲錯誤數據類型的樂趣,我假設你正在糾正)。如果有流氓角色,那麼你可以用translate來擺脫它們,但是你不得不懷疑數據的完整性和你最終的價值。

您可以這樣做來顯示所有無法轉換的值,這可能會讓您知道繼續進行的最佳方法 - 如果只有少數您可以在手動更正之前手動更正重新運行您的更新:

​​

這是猜測,你有一個名爲ID唯一標識符字段,但是更改爲適合你的餐桌,效果顯着。

另一種方法是轉換是有效的號碼並跳過休息,你可以用一個錯誤記錄表做到:

exec dbms_errlog.create_error_log(dml_table_name => 'PATIENTINSURANCE'); 

merge into patientinsurance target 
using (select id, visitsauthorized from patientinsurance) source 
on (target.id = source.id) 
when matched then 
    update set target.newvisits = source.visitsauthorized 
log errors into err$_patientinsurance reject limit unlimited; 

然後,您可以查詢錯誤表,看看有什麼失敗:

select id, visitsauthorized, ora_err_number$ 
from err$_patientinsurance; 

或查看您的主表中有哪些記錄有newvisits仍然null。分析你的數據可能應該是第一步。


如果你想去掉所有非數字字符和治療任何留作號碼,然後你可以改變合併的事:

... 
update set target.newvisits = regexp_replace(source.visitsauthorized, 
    '[^[:digit:]]', null) 

但你可能並不需要合併,你可以做:

update patientinsurance set newvisits = regexp_replace(visitsauthorized, 
    '[^[:digit:]]', null); 

這將去掉任何團體或小數點分隔符爲好,這可能不是一個問題,尤其是在你插入一個數字(8)列。但是如果你願意的話,你可以保留這些,通過改變模式爲'[^[:digit:].,]' ......儘管這可能會給你帶來其他問題。

如果正則表達式太慢,你也可以用translate做到這一點。

+0

更新patientinsurance設置newvisits = to_number(visitsauthorized,'VARCHAR2(10)')如果我使用這樣的我得到這樣的錯誤 錯誤在第1行: ORA-01481:無效數字格式模型 – Kiran

+0

@Kiran no no ,那不是一個[數字格式模型](http://docs.oracle.com)。COM/CD/E11882_01/server.112/e26088/sql_elements004.htm#SQLRF00211);先看數據。如果你有像「1,234」這樣的數據,那麼模型將會像「999,999」一樣。完全取決於表中的內容。 –

+0

當我使用合併程序時,我能夠複製只有數字,但我需要訪問授權中的所有信息包含像(te44,700,ket99,500)到新訪問(te44,700,ket99,500),但我只複製700,500個值其餘值越來越err日誌,所以我需要做下一步 – Kiran

相關問題