Oracle
 sql >> Database >  >> RDS >> Oracle

Procedura PL/SQL:UPDATE nomi maiuscoli in initcaps, con una gestione speciale per alcuni valori

Supponendo che la gestione speciale sia necessaria solo per nomi come 'S... , aggiungendo un semplice REPLACE dovrebbe funzionare. A proposito, non hai bisogno di due UPDATE separati istruzioni - INITCAP convertirà automaticamente i caratteri non iniziali in minuscolo.:

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

Questo sostituirà tutte le occorrenze di 'S con 's . Se hai bisogno di gestire anche altri casi, ti suggerisco di provare REGEXP_REPLACE() .

La funzione NLS_INITCAP aiuta con alcuni problemi di globalizzazione. Ad esempio, mette in maiuscolo sia la I e il J in IJSLAND . Ma non aiuta con 'S nomi. Non sono sicuro se si tratti di un bug con le funzioni di globalizzazione di Oracle o se quei nomi di città siano tutte eccezioni.