Assumindo que o tratamento especial é necessário apenas para nomes como
'S... , adicionando um simples REPLACE Deveria trabalhar. BTW, você não precisa de dois UPDATE separados instruções - INITCAP converterá automaticamente caracteres não iniciais em minúsculas.: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
Isso substituirá todas as ocorrências de
'S com 's . Se você também precisa lidar com outros casos, sugiro que tente REGEXP_REPLACE() . A função
NLS_INITCAP
ajuda com alguns problemas de globalização. Por exemplo, ele capitaliza tanto o I e o J em IJSLAND . Mas não ajuda com 'S nomes. Não tenho certeza se isso é um bug com as funções de globalização da Oracle ou se esses nomes de cidades são exceções.