Update tabela Oracle

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
emer_rosa
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Sáb, 28 Ago 2010 10:45 am
Localização: Torres-RS
Emerson E. Rosa

Ola, alguém poderia me ajudar em um update em uma tabela de preço em Oracle?, implantamos o sistema a pouco e tenho tudo em excel, gostaria de fazer o seguinte , o update simples eu sei fazer, até com a condição where, so que agora nesta tabela complicou, a tabela é a seguinte:



CODTAB | CODPROD | VLRVENDA
1 | 100 | 2,51
1 | 101 | 1,51
1 | 110 | 2,61
1 | 145 | 2,50
2 | 134 | 1,88
2 | 187 | 1,30
2 | 2345 | 3,88
2 | 11 | 3,70
2 | 10 | 0,51
2 | 101 | 2,21
2 | 50100 | 1,51

Eu tenho em excel mais por exemplo eu gostaria de atualizar apenas uma parte da tabela 1, e uma parte da tabela 2, pois tem mais de 1500 itens, e eu quero fazer um update em torno de 400 itens nas listas 1 e 2, são preços diferenciados, EX.:

codigo tabela , codigo produto , preço de venda
1 , 101 , 1,51
1 , 110 , 2,68
2 , 101 , 1,29


fazer somente olhando o codigo de trodutos não da pois exite o mesmo codigo nas duas listas de preços ( 1 e 2 ) com preços diferentes, e preciso atualizar eles nas duas também com update com preços diferentes, e também não é linear o aumento de preço, existe redução também, eu fiz um arquivo txt com o codigo da tabela ( CODTAB), dodigo do produto ( CODPROD ), e o preço ( VLRVENDA ), como disse é uns 400 itens na maioria tem nas duas tabelas com preços diferentes.

Se alguém puder me dar uma ajuda agradeço muito, Abraço.
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP

Do jeito que você está falando, só com "serviço de preso" mesmo que você vai conseguir.

Colocando todos os códigos de tabela E produto e o preço, já que não existe nenhuma lógica no aumento (ou diminuição) do preço...

Exemplo:

Selecionar tudo

UPDATE SUA_TABELA 
SET VLRRENDA = NVL2(
  NULLIF(CODTAB, 1),
  DECODE(CODPROD, 101, 1.29, VLRVENDA ),
  DECODE(CODPROD, 101, 1.51, 110, 2.68, VLRVENDA )
);
Os códigos dos produtos e preços da tabela 2 vão no primeiro decode e os códigos da tabela 1 vão no segundo decode, seguindo o par (produto, novo_preço)... Se não conhecer as funçoes decode, nlv2 e nullif, procure no google que vai ser fácil de você entender a lógica... Mas não sei como fugir do "serviço de preso"... :-o
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP

Pensando bem, outro jeito seria importar sua tabela do excel pra dentro do oracle ou usar external table pra ler a planilha e fazer um update ou merge mais simples, consultando a planilha...

Selecionar tudo

MERGE INTO SUA_TABELA b
USING (
  SELECT CODTAB, CODPROD, VLRVENDA 
  FROM SUA_PLANILHA) e
ON (b.CODTAB = e.CODTAB 
  AND b. CODPROD = e. CODPROD)
WHEN MATCHED THEN
  UPDATE SET b.VLRVENDA = e.VLRVENDA;
O update é semelhante ao merge então nem vou postar...
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante