GARANTIR DESCONTO

Fórum Como dar um update pegando o resultado de um select(execute block) #522349

09/06/2015

0

Pense no seguinte caso : tenho um cadastro de produto
Tabela :PRODUTO
Campos: SECCOD, GRPCOD, SGRCOD, PRONCM

e

Tabela SUBGRUPO
Campos: SECCOD, GRPCOD, SGRCOD, SGRNCM.

preciso que o comando pegue o valor do SGRNCM da tabela SUBGRUPO e atualize o PRONCM da tabela PRODUTO
Quando o SECCOD,GRPCOD, SGRCOD forem os mesmo da tabela produto.

Nisso ele alteraria todos os produtos com o ncm do campo SGRNCM... como faço?

Dei um select que foi:
select i.sgrncm,p.proncm from produto as p left join subgrupo as i on (p.seccod = i.seccod) and (p.grpcod = i.grpcod) and(p.sgrcod = i.sgrcod)

porém como faço para ele fazer o PRONCM assumir o SGRNCM?
Bruno Zanca

Bruno Zanca

Responder

Posts

10/06/2015

Marisiana Battistella

Você terá que fazer isso em um procedimento e utilizar variáveis... FOR SELECT ... INTO ... DO
Responder

Gostei + 0

10/06/2015

Wilson Vieira

Boa tarde Bruno

O comando ficaria assim

update produto p set p.proncm = (select s.sgrncm from subgrupo s where s.seccod = p.seccod)
Responder

Gostei + 0

12/06/2015

Marisiana Battistella

Bruno, conseguistes evoluir?
Responder

Gostei + 0

12/06/2015

Bruno Zanca

EXECUTE BLOCK
RETURNS (sec1 char(2), grp1 char(3),sgr1 char(3), prncm1 VARCHAR(20),sgrcm2 VARCHAR(20),sec2 char(2), grp2 char(3),sgr2 char(3))
AS
BEGIN
FOR SELECT p.seccod, p.grpcod, p.sgrcod, p.proncm, i.sgrncm , i.seccod, i.grpcod, i.sgrcod FROM produto p left join subgrupo i on p.seccod = i.seccod into :sec1, :grp1, :sgr1, :prncm1, :sgrcm2 , :sec2, :grp2, :sgr2

DO
begin
update produto p set p.proncm = :sgrcm2 where ((:sec1 = :sec2) and (:grp1 = :grp2) and (:sgr1 = :sgr2)) ;
SUSPEND;
end
END


Tentei assim nao deu certo, ele nao trocou o ncm dos produtos de acordo com o ncm do subgrupo....usando essas condiçoes secao grupo e subgrupo iguais para pegar sgrncm
Responder

Gostei + 0

12/06/2015

Bruno Zanca

EXECUTE BLOCK
RETURNS (sec1 char(2), grp1 char(3),sgr1 char(3), prncm1 VARCHAR(20),sgrcm2 VARCHAR(20),sec2 char(2), grp2 char(3),sgr2 char(3))
AS
BEGIN
FOR SELECT p.seccod, p.grpcod, p.sgrcod, p.proncm, i.sgrncm , i.seccod, i.grpcod, i.sgrcod FROM produto p left join subgrupo i on p.seccod = i.seccod into :sec1, :grp1, :sgr1, :prncm1, :sgrcm2 , :sec2, :grp2, :sgr2

DO
begin
update produto p set p.proncm = :sgrcm2 where ((:sec1 = :sec2) and (:grp1 = :grp2) and (:sgr1 = :sgr2)) ;
SUSPEND;
end
END


Tentei assim nao deu certo, ele nao trocou o ncm dos produtos de acordo com o ncm do subgrupo....usando essas condiçoes secao grupo e subgrupo iguais para pegar sgrncm
Responder

Gostei + 0

12/06/2015

Bruno Zanca

EXECUTE BLOCK
RETURNS (sec1 char(2), grp1 char(3),sgr1 char(3), prncm1 VARCHAR(20),sgrcm2 VARCHAR(20),sec2 char(2), grp2 char(3),sgr2 char(3))
AS
BEGIN
FOR SELECT p.seccod, p.grpcod, p.sgrcod, p.proncm, i.sgrncm , i.seccod, i.grpcod, i.sgrcod FROM produto p left join subgrupo i on p.seccod = i.seccod into :sec1, :grp1, :sgr1, :prncm1, :sgrcm2 , :sec2, :grp2, :sgr2

DO
begin
update produto p set p.proncm = :sgrcm2 where ((:sec1 = :sec2) and (:grp1 = :grp2) and (:sgr1 = :sgr2)) ;
SUSPEND;
end
END


Tentei assim nao deu certo, ele nao trocou o ncm dos produtos de acordo com o ncm do subgrupo....usando essas condiçoes secao grupo e subgrupo iguais para pegar sgrncm
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar