Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Dúvida SELECT DENTRO DE UM INSERT

Boa tarde pessoal, eis eu aqui com mais uma dúvida.

Estou tentando descobrir como faço para dar um select dentro de um insert.

Estou tentando da seguinte forma:

insert into teste (vetor) 
    select id_usuario from teste where nome='rafael'

Porém me acusa a seguinte mensagem:

  • You will need to rewrite or cast the expression.

Eu não faço ideia como fazer esse cast, alguém consegue me dar uma luz?

5 respostas
solução!

Olá Rafael, tudo bem?

O erro aparentemente é pelo fato de o campo que está no select e o campo que recebera o valor no insert, são de tipos diferentes e por esse motivo você precisaria realizar uma conversão nos dados antes de inserir.

Então você poderia resolver de duas formas, a primeira seria alterar um dos campos, deixando os dois campos com o mesmo tipo de dados e realizar a inserção. Outra opção seria usar o CAST no momento da inserção como sugerido. Dentro do CAST você informa o campo e para qual tipo de dados ele será convertido no momento do select, dessa forma:

INSERT VALOR teste (vetor) 
    SELECT CAST (id_usuario AS text) FROM teste WHERE nome='rafael'

Neste exemplo, o tipo do campo id_usuario esta sendo convertido para o mesmo tipo que o campo vetor para realizar a inserção.

Espero ter ajudado e bons estudos!

No caso meu vetor é do tipo smallint{} enquanto o id_usuario é do tipo int.

Alguma sugestão? Tentei fazer a conversão mas não deu certo kkk

Tentei botar ambos como smallint[] também mas não funcionou

Rafael, neste caso, sugiro que altere o vetor para int. Certamente, o que ocorreu que você não conseguiu converter o campo id_usuario para smallint, é pq vc deve ter valores que não cabem num smallint. Assim sendo, o indicado é converter o campo smallint em inteiro (int). Espero ter ajudado.

Amanhã cedo já testo isso, eu acho que já testei isso. Mas não tenho certeza.

Então, criei uma nova tabela de teste, agora com o campo vetor no tipo integer[] e mesmo assim não funciona a inserção.

Acredito que seja necessária uma conversão do tipo integer para integer[]. Problema é, como fazer isso?