Förutsatt att den speciella hanteringen endast är nödvändig för namn som 'S... , lägga till en enkel REPLACE borde fungera. BTW, du behöver inte två separata UPDATE uttalanden - INITCAP konverterar automatiskt icke-initialtecken till gemener.:
with v_data(name) as (
select 'AMSTERDAM' from dual union all
select '''S GRAVENHAGE' from dual union all
select 'DEN HAAG' from dual union all
select 'IJSLAND' from dual
)
select
replace(nls_initcap(name, 'NLS_SORT=xDutch'), '''S', '''s') name
from v_data
Name
----
Amsterdam
's Gravenhage
Den Haag
IJsland
Detta kommer att ersätta alla förekomster av 'S med 's . Om du behöver hantera andra fall också, föreslår jag att du försöker REGEXP_REPLACE() .
Funktionen NLS_INITCAP
hjälper till med vissa globaliseringsfrågor. Till exempel använder den både I med versaler och J i IJSLAND . Men det hjälper inte med 'S namn. Jag är inte säker på om det är ett fel med Oracles globaliseringsfunktioner eller om dessa stadsnamn alla är undantag.