sql >> Base de Datos >  >> RDS >> Oracle

Procedimiento PL/SQL:ACTUALIZAR nombres en mayúsculas a initcaps, con manejo especial para algunos valores

Asumiendo que el manejo especial es necesario solo para nombres como 'S... , agregando un simple REPLACE Deberia trabajar. Por cierto, no necesitas dos UPDATE separados sentencias - INITCAP convertirá automáticamente los caracteres no iniciales a 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

Esto reemplazará todas las apariciones de 'S con 's . Si también necesita manejar otros casos, le sugiero que pruebe REGEXP_REPLACE() .

La función NLS_INITCAP ayuda con algunos problemas de globalización. Por ejemplo, escribe en mayúscula tanto la I y el J en IJSLAND . Pero no ayuda con 'S nombres No estoy seguro de si se trata de un error con las funciones de globalización de Oracle o si esos nombres de ciudades son todas excepciones.