[RESOLVIDO]Dúvida com INSERT

Galera eu tô tentando usar um insert com select e outros atributos também. Estou usando BD oracle e essa eh a instrução

INSERT INTO docsChesf values (‘1’,‘25/11/2008’,(select * from docsChesf where codigo=‘IOL01’))

A mensagem de erro diz que não há campos suficientes…

eu sei que não dá pra fazer isso… mas tem alguma maneira de fazer isso de outra maneira?

O problema é que vc está usando *, defina a coluna que vc deseja pegar o resultado, depois jogue o resultado do select numa variável e colque-a na instrução.

Tipo:

variável criada = select * from docsChesf where codigo=‘IOL01’

INSERT INTO docsChesf values (‘1’,‘25/11/2008’,variável criada)

SELECT * é uma coisa que se usa normalmente apenas quando você vai fazer uma consulta direta no banco via SQL*Plus. Em programas, nunca use SELECT * para evitar os seguintes problemas:

  • a) Seu programa parar de funcionar porque alguém mudou a tabela e incluiu ou excluiu campos, e você nem tem idéia de que campos estão faltando;
  • b) Seu programa funcionar mais devagar, porque está solicitando mais dados que o necessário.

faça assim

select campo from docsChesf where codigo='IOL01' do jeito que vc fez ele não vai funcionar porque a SQL está retornando todos campos da tabela

mas eu quero q ele retorne todos os campos…
Pq o q estou fazendo eh um trigger… quando eu deleto de uma tabela eu movo os dados para uma base histórica, então as tabelas são idênticas tirando o id e a data de obsolescencia do documento que é da tabela histórica…

Não entendi o lance da variável… vc diz uma variável em java?

o seu select tem que retornar apenas um valor…

vc pode concatenar os dados em um so

isso se sua tabela docsChesf tiver apenas 3 campos ID, DATA e DADOS

INSERT INTO docsChesf values ('1','25/11/2008',select chave ||','|| nome||','||endereco from cliente) 

Valeu cara… resolveu meu prob… to pegando um por vez agora… tah mto grande mas ta valendo…

Pegou as 3 hein? kkkkkkkk