Update e Select no mesmo comando
Preciso fazer um update no campo pre_del apenas nos listados na select, mas quando rodo atualiza todos os registros.
Alguém sabe como corrigir isso?
Update bnf_pre_banco set bnf_pre_banco.pre_del = B
WHERE PRE_DEL IN ( SELECT BANCO FROM
( SELECT b.pre_con||b.pre_est||b.pre_ben MATRICULA
,b.pre_nom NOME
,b.pre_ven VENCIMENTO
,b.pre_val VALOR
,b.pre_del BANCO
,SUM(B.PRE_VAL) OVER (ORDER BY B.PRE_BEN) ACUMULADO
FROM BNF_PRE_BANCO B
GROUP BY b.pre_con, b.pre_est,b.pre_ben,b.pre_nom,b.pre_ven,b.pre_val, b.pre_del
ORDER BY B.PRE_BEN)
WHERE ACUMULADO < 600)
Alguém sabe como corrigir isso?
Update bnf_pre_banco set bnf_pre_banco.pre_del = B
WHERE PRE_DEL IN ( SELECT BANCO FROM
( SELECT b.pre_con||b.pre_est||b.pre_ben MATRICULA
,b.pre_nom NOME
,b.pre_ven VENCIMENTO
,b.pre_val VALOR
,b.pre_del BANCO
,SUM(B.PRE_VAL) OVER (ORDER BY B.PRE_BEN) ACUMULADO
FROM BNF_PRE_BANCO B
GROUP BY b.pre_con, b.pre_est,b.pre_ben,b.pre_nom,b.pre_ven,b.pre_val, b.pre_del
ORDER BY B.PRE_BEN)
WHERE ACUMULADO < 600)

Caroline Caca
Curtidas 0
Respostas

Marco Pinheiro
11/11/2011
Se você rodar o comando abaixo, são mostrados somente os registros que você quer que altere?
select * from bnf_pre_banco
WHERE PRE_DEL IN ( SELECT BANCO FROM
( SELECT b.pre_con||b.pre_est||b.pre_ben MATRICULA
,b.pre_nom NOME
,b.pre_ven VENCIMENTO
,b.pre_val VALOR
,b.pre_del BANCO
,SUM(B.PRE_VAL) OVER (ORDER BY B.PRE_BEN) ACUMULADO
FROM BNF_PRE_BANCO B
GROUP BY b.pre_con, b.pre_est,b.pre_ben,b.pre_nom,b.pre_ven,b.pre_val, b.pre_del
ORDER BY B.PRE_BEN)
WHERE ACUMULADO < 600)
select * from bnf_pre_banco
WHERE PRE_DEL IN ( SELECT BANCO FROM
( SELECT b.pre_con||b.pre_est||b.pre_ben MATRICULA
,b.pre_nom NOME
,b.pre_ven VENCIMENTO
,b.pre_val VALOR
,b.pre_del BANCO
,SUM(B.PRE_VAL) OVER (ORDER BY B.PRE_BEN) ACUMULADO
FROM BNF_PRE_BANCO B
GROUP BY b.pre_con, b.pre_est,b.pre_ben,b.pre_nom,b.pre_ven,b.pre_val, b.pre_del
ORDER BY B.PRE_BEN)
WHERE ACUMULADO < 600)
GOSTEI 0

Luan Soares
11/11/2011
Cara, minha praia está sendo o firebird. Mas com o pouco conhecimento que tenho de Oracle(e sua semelhança com FB) vi que esse código está MUITO errado.
OBS: O que eu modifiquei no código, está entre { (chaves)
Update bnf_pre_banco set bnf_pre_banco.pre_del = {}B{}
WHERE {bnf_pre_banco.}PRE_DEL IN
( SELECT BANCO FROM
//{from o que!?}
{where {from o que!?}.{coluna o que!?} in}
//Aqui por se tratar de um subselect, você só pode buscar UMA coluna.
( SELECT {UMA COLUNA SÓ}
FROM BNF_PRE_BANCO B
GROUP BY {REVEJA A COLUNA QUE IRÁ AGRUPAR}
ORDER BY {UMA COLUNA POR FAVOR})
ACUMULADO < 600)
Seria bom também, para um melhor entendimento. Você postar os scripts de criação das tabelas, para recriarmos em nosso banco de dados e fazer os testes.
OBS: O que eu modifiquei no código, está entre { (chaves)
Update bnf_pre_banco set bnf_pre_banco.pre_del = {}B{}
WHERE {bnf_pre_banco.}PRE_DEL IN
( SELECT BANCO FROM
//{from o que!?}
{where {from o que!?}.{coluna o que!?} in}
//Aqui por se tratar de um subselect, você só pode buscar UMA coluna.
( SELECT {UMA COLUNA SÓ}
FROM BNF_PRE_BANCO B
GROUP BY {REVEJA A COLUNA QUE IRÁ AGRUPAR}
ORDER BY {UMA COLUNA POR FAVOR})
ACUMULADO < 600)
Seria bom também, para um melhor entendimento. Você postar os scripts de criação das tabelas, para recriarmos em nosso banco de dados e fazer os testes.
GOSTEI 0

Luan Soares
11/11/2011
Cara, minha praia está sendo o firebird. Mas com o pouco conhecimento que tenho de Oracle(e sua semelhança com FB) vi que esse código está MUITO errado.
OBS: O que eu modifiquei no código, está entre { (chaves)
Update bnf_pre_banco set bnf_pre_banco.pre_del = B
WHERE {bnf_pre_banco.}PRE_DEL IN
( SELECT BANCO FROM
//{from o que!?}
{where {from o que!?}.{coluna o que!?} in}
//Aqui por se tratar de um subselect, você só pode buscar UMA coluna.
( SELECT {UMA COLUNA SÓ}
FROM BNF_PRE_BANCO B
GROUP BY {REVEJA A COLUNA QUE IRÁ AGRUPAR}
ORDER BY {UMA COLUNA POR FAVOR})
ACUMULADO < 600)
Seria bom também, para um melhor entendimento. Você postar os scripts de criação das tabelas, para recriarmos em nosso banco de dados e fazer os testes.
OBS: O que eu modifiquei no código, está entre { (chaves)
Update bnf_pre_banco set bnf_pre_banco.pre_del = B
WHERE {bnf_pre_banco.}PRE_DEL IN
( SELECT BANCO FROM
//{from o que!?}
{where {from o que!?}.{coluna o que!?} in}
//Aqui por se tratar de um subselect, você só pode buscar UMA coluna.
( SELECT {UMA COLUNA SÓ}
FROM BNF_PRE_BANCO B
GROUP BY {REVEJA A COLUNA QUE IRÁ AGRUPAR}
ORDER BY {UMA COLUNA POR FAVOR})
ACUMULADO < 600)
Seria bom também, para um melhor entendimento. Você postar os scripts de criação das tabelas, para recriarmos em nosso banco de dados e fazer os testes.
GOSTEI 0