如果之前已經詢問過,我表示歉意。我有一個名爲POSITION
的字段,它是VARCHAR2(20 BYTE)
。如果我使用的語句替換字段中的字符時,REPLACE語句和WHERE之間的區別?
update SA_ASSET
set POSITION = REPLACE(POSITION, 'SOLIDS BLDG', 'SOLIDS STRUCTURE')
where location = 'SOUTH COUNTY REGIONAL AWT PLAN';
我想出了一個
ORA-12899:。值太大,列 「SYNERGEN」 「SA_ASSET」, 「位置」 (實際:21,最大:20)錯誤。
如果我做同樣的事情用一個WHERE語句它的工作原理:
update SA_ASSET
set POSITION = 'SOLIDS STRUCTURE'
where location = 'SOUTH COUNTY REGIONAL AWT PLAN'
AND POSITION = 'SOLIDS BLDG';
更換的長度是相同的(15個字符和15個字節),但使用REPLACE語句的東西是不同的。這在char /字節計數小於20的情況下發生過。我們正在使用Oracle數據庫11g企業版版本11.1.0.7.0 - 64位生產(如果這有什麼區別)有沒有人遇到過這個問題並且有一個答案爲什麼?
這似乎從不可能數據,但NLS_LANGUAGE和NLS_CHARACTERSET的設置是什麼。有沒有機會有口音的數據? – kevinsky
您可能有一排位置<>'SOLIDS BLDG'',但'SOLIDS BLDG''是一個子字符串。一些線路「SOLIDS BLDG 20000」,其中「SOLID STRUCTURE 20000」的替換物太大。 –