Ervan uitgaande dat de speciale behandeling alleen nodig is voor namen als 'S... , het toevoegen van een eenvoudige REPLACE zou moeten werken. Trouwens, je hebt geen twee aparte UPDATE nodig verklaringen - INITCAP converteert automatisch niet-initiële tekens naar kleine letters.:
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
Dit vervangt alle exemplaren van 'S met 's . Als u ook andere zaken moet behandelen, raad ik u aan REGEXP_REPLACE() te proberen .
De functie NLS_INITCAP
helpt bij sommige globaliseringsproblemen. Het zet bijvoorbeeld zowel de I en de J in IJSLAND . Maar het helpt niet met 'S namen. Ik weet niet zeker of dat een bug is met de globaliseringsfuncties van Oracle of dat die plaatsnamen allemaal uitzonderingen zijn.