Update no Firebird
24/04/2018
0
Depois de muito bater cabeça eis que aqui estou. Estou habituado a dar updates no Firebird quando há uma comparação de um campo com outro. Porém esse caso é diferente e não consegui encontrar uma lógica para tal.
Vamos lá:
Tenho uma tabela X, com o campo plano, convenio, e codigo_empresa
Somente onde convenio=378, os planos tem preenchido também o codigo_empresa.
Preciso que os valores da codigo_empresa sejam atualizados para o convenio 378 também. Tentei da seguinte forma:
update cl_convenioplanos set codigo_empresa = (select codigo_empresa from cl_convenios where convenio=378) where convenio=338
Mas sem sucesso. Tentei várias variações e também sem sucesso.
A estrutura da tabela está mais ou menos assim:
Handle | Plano | convenio| codigo_empresa
1 87 29
2 87 338 15
3 90 45
4 505 338 27
5 164 183
Alguém tem alguma dica pra mim conseguir que o valor de codigo_empresas(que está no convenio 338) ser replicado para as outras linhas?
Não posso fazer o campo receber ele mesmo porque ele pode receber valor vazio.
Diego
Post mais votado
24/04/2018
não sei se entendi bem mais acredito que assim vc consegue fazer ele receber ele mesmo mas somente quando for o campo vazio segue :
update cl_convenioplanos set codigo_empresa = codigo_empresa where convenio = 338 and codigo_empresa is null
caso nao seja isso volte a postar
Douglas Sousa
Mais Posts
24/04/2018
Diego
É basicamente o contrário, somente quando não for o 338 que ele deve atualizar o registro codigo_empresa.
Usando essa sua mesma idéia e mudando para NOT IN
update cl_convenioplanos
set codigo_empresa = codigo_empresa
where convenio not in (338)
and codigo_empresa is null
Isso reproduziria o mesmo resultado que is not, e mesmo assim, puxaria um valor vazio para o campo.
Não sei se nesse caso não seria necessário eu trabalhar com uma View, que armazenasse o dado e jogasse ali.
25/04/2018
Fabricio Kawata
Abraço!
25/04/2018
Diego
Pois é, tentei extrair os dados do update através de um select, porém como a resposta pro select daria mais do que uma linha, não funciona.
update cl_convenioplanos set codigo_empresa = (select codigo_empresa from cl_convenioplanos where convenio=338)
Esse select geraria multiplas linhas, então acredito que seria necessário um cursor for, mas não sei como implementá-lo no update.
Está mais ou menos assim:
http://oi68.tinypic.com/2447alg.jpg
Clique aqui para fazer login e interagir na Comunidade :)