Insert a partir de um Cursor

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
danielpbarros
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 67
Registrado em: Dom, 15 Jan 2012 9:34 pm
Contato:
Daniel Barros

Boa tarde Pessoal,

Estou com uma dificuldade para realizar um insert em uma tabela ANUAL ( tabela tem colunas, nome_produto, jan, fev, mar, abr, mai, ..., dez ).

O cursos tem um select que guarda o nome_produto, mês. Com isso tenho uma coluna mês.

Fiz um FOR declarando e incrementando uma variável até 12, onde seria o ultimo mês do ano. Porém como meu select traz o mês como coluna, eu não consigo fazer o FOR utilizando apenas um insert.

alguém poderia me ajudar com alguma idéia?

abraços.
Daniel.
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Pelo que entendi(tenho minhas dúvidas) você utilizaria 2 FOR aninhados, o primeiro de produtos e o interno de meses com o UNICO INSERT dentro deste.

Mas confesso que não entendi perfeitamente o que desejas.
Se puder mostrar a estrutura do seu código destacando o problema...
danielpbarros
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 67
Registrado em: Dom, 15 Jan 2012 9:34 pm
Contato:
Daniel Barros

Seguinte,

Eu não tenho como mostrar a estrutura aqui, porque estou em rede separada, e como se trata de cliente não tenho acesso a base pelo meu note.

Mas assim, vou tentar explicar melhor:

Tenho uma tabela chamada t_margem com as seguintes colunas: COD_PROD, DESC_PRODUTO, JAN, FEV, MAR, ABR, MAI, .... , DEZ.

Preciso alimentar as margens de cada produto (que é uma formula que já fiz) de maneira anual, ou seja, um insert para o produto X (de janeiro a dezembro), um insert para o produto Y (de janeiro a dezembro) e assim por diante.

O select que gera essa margem é composta das colunas COD_PROD, DESC_PROD, mês e MARGEM. Com isso eu tenho uma coluna que traz todos os meses de cada produto nela.

A minha dúvida e, quero fazer uma procedure que insira cada produto com suas margens de acordo com o mês. Eu criei um cursor com o select, mas como tenho todos os meses em apenas uma coluna, não consigo inserir na tabela t_margem (COD_PROD, DESC_PRODUTO, JAN, FEV, MAR....,DEZ).

abraços.
Daniel.
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Existem algumas formas de conseguir transformar colunas em linhas e vice-versa.
Se você está utilizando o 11g, dá um olha em PIVOT.
http://www.oracle.com/technetwork/artic ... 97235.html

Porém se usas o 10g, olha uma alternativa:
http://asktom.oracle.com/pls/asktom/f?p ... 9593546543

Se 9i, olha através deste link :
http://stackoverflow.com/questions/6361 ... l-pivoting
danielpbarros
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 67
Registrado em: Dom, 15 Jan 2012 9:34 pm
Contato:
Daniel Barros

Então Daniel, valeu pelos links interessantes que passou.

Utilizo 10g e já tinha tentado realizar o select com o decode, para formar a coluna dos meses. Só que o meu select traz os itens do pedido, e para realizar o calculo de margem eu preciso somar cada item, impostos e etc. Com isso não posso fazer um, por exemplo: sum(decode(mês,01,....) pois ele vai calcular o percentual de margem errado. Eu tenho que somar campo a campo.

Esse é o meu maior problema.

abraços.
Daniel.
danielpbarros
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 67
Registrado em: Dom, 15 Jan 2012 9:34 pm
Contato:
Daniel Barros

Daniel,

Então cara, consegui a partir do ultimo link que você me passou. Na verdade é uma solução bem simples, que eu já tinha feito em alguma situações, mas não implementei nessa.

Muito obrigado pelo tempo dedicado.

abraços.
Daniel Barros
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 12 visitantes