2012-12-18 85 views
0

我有一個包含varchar2(4000)數據類型的URL值的列(URL)。其中一些值超過4000個字符,那麼是否有一種方法可以讓我只將列中的那些值超過4000個字符的子字符串替換爲用同一列中的子字符串替換原始值?子字符串列值超過4000個字符

+1

也許我很密集,但我對你認爲在varchar2(4000)列中有> 4000個字符的事實持懷疑態度。在列中可以有的最大字符數是4000 .. – StevieG

回答

2

你能夠找到超過4000個字符這樣的列,

select userid, length(description) 
from Users 
where length(description) > 4000; 

所以分辨率,你能做到這一點的CTL文件本身如下,

description "SUBSTR(:description, 1, 4000)", 

如果你不想要鬆散的數據,那麼你可以使用CLOB數據類型而不是varchar2(4000)

+0

是的,我已經嘗試過CLOB數據類型,但是我需要這些數據進行文本挖掘,顯然CLOB數據類型在建模過程中沒有考慮到,對於這個問題,nvarchar2也不是。 – user1874311

+0

然後,只要你使用varchar2,你將最終發生機智錯誤。但是你可以使用子字符串來限制數據。由於您需要用於文本挖掘的數據,因此您應該有一個具有CLOB數據類型的臨時表。 – Mari

+0

或者另一種方式,您可以編寫一個觸發器將這些記錄存儲在臨時表中(可以將它們分開或使用CLOB數據類型) – Mari

2

varchar最多支持4,000個字符;每個和每個函數輸出,如SUBSTR,都是一個varchar,所以不能容納超過4000個字符的字符串。你將會使用clob;但是clob是一個lobobject;所以,它會很慢。

您可以在創建表時添加2列並使用PL/SQL塊作爲varchar在PL/SQL中最多可以有32,767個字符。

相關問題