Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como substituir um valor separado por vírgula na coluna da tabela pelo valor de entrada do usuário oracle

delete from yourtable t
where
  instr(','||t.col||',', '123') > 0

Você pode substituir '123' por um parâmetro, se desejar.

Mas uma maneira melhor seria não armazenar valores separados por vírgulas e criar uma tabela de detalhes. Se você precisar procurar um valor específico dentro de uma lista separada por vírgulas, não poderá fazer uso de índices, entre outras limitações.

[editar] Não entendi a pergunta. Você quis dizer isso:
update YourTable t
set
  t.col = substr(substr(replace(','||t.col||',', ',123,', ','), 2), -2)
where
  instr(','||t.col||',', '123') > 0
  • Adicione ',' antes e depois para corresponder aos itens no início ou no final do valor.
  • Substitua usando o valor ',123' (entre vírgulas) para evitar a correspondência acidental de 1234 também.
  • Use substr duas vezes para remover o primeiro e o último caractere (as vírgulas adicionadas)
  • Use instr no where para evitar a atualização de registros que não precisam ser atualizados (melhor desempenho).