Trigger para inserir em outra tabela

Oracle

25/10/2017

Bom dia a todos!

Estou com uma duvida aqui não sei se por trigger poderá ser resolvido, tenho uma tabela que recebe 4 linhas ou seja 4 novos valores, preciso ordenar um campo de cada linha em ordem crescente e inserir em outra tabela em somente uma linha, ou seja cada novo valor sera um campo da linha inserida.

Alguem sabe se por trigger poderá ser feito ou de outra forma?

att
Kaio

Kaio

Curtidas 0

Respostas

Allan Monteiro

Allan Monteiro

25/10/2017

Se eu entendi, você vai receber por exemplo: abacate, morango, uva, pera que será inserido assim na tabela A:
1 - abacate
2 - morango
3- uva
4-pera

e na tabela B você quer inserir 1 - abacate, morango, pera, uva. Certo?

Se sim (eu não conheço muito de SQL Server), mas você pode pegar os valores inseridos na tabela A e fazer o seguinte:

coalesce((select cast(o.NOMECAMPO as varchar(4000)) + ',' AS [text()]
from A o with (nolock)
where A.ID = B.ID
FOR XML PATH(''),TYPE).value('.[1]','VARCHAR(MAX)'),'')

Ele vai pegar todos os campos da tabela A e "concatenar" em uma linha separando por vírgula, assim você pode trabalhar no insert da tabela B.

Qualquer coisa avisa aí, estou aprendendo SQL server também.

https://sqlandme.com/2011/04/27/tsql-concatenate-rows-using-for-xml-path/
GOSTEI 0
Venancio Alves

Venancio Alves

25/10/2017

Olá Kaio, sim você pode usar Trigger para armazenar em outra tabela e mais uma função de concatenar para juntar os dados em um único campo, lembrando que existem outras soluções.
GOSTEI 0
Allan Monteiro

Allan Monteiro

25/10/2017

Desculpe, vi depois que é Oracle rs.

No Oracle você pode usar o LISTAGG

exemplo de uso: Select LISTAGG(campo, ',') from tabela

Mas se não me engano, não são todas as versões que possuem este comando.
GOSTEI 0
Kaio

Kaio

25/10/2017

Bom dia Allan!

Nao sera concatenado, sera um registro em cada campo.

Exemplo

campo1 = abacate , campo2 = morango ...

Minha duvida é como fazer um insert de 4 registros de uma vez em uma unica linha por trigger
GOSTEI 0
POSTAR