Consulta múltipla SQL no ORACLE

15/06/2011

0

Bom dia a todos, estou aqui quebrando a cabeça para criar um sistema de exportação de dados. Vou explicar o meu cenário:Tenho um banco de dados ORACLE, onde tenho um sistema de controle que gerencia faturas dos consumidores. Cada fatura está armazenada numa tabela chama FATURA. Os itens que compõe essa fatura estão na tabela ITENS_FATURA. A fatura é montada de acordo com os itens armazenados na ITENS_FATURA, como, por exemplo, multas, juros, segunda via etc...
Eu fiz a consulta abaixo:
select f.ID_CONSUMIDOR, c.NOME,  f.ID_SERVICO, sum(f.VALOR) as soma from ITENS_FATURA f inner join consumidor con f.ID_CONSUMIDOR = c.ID_CONSUMIDORwhere f.mes_ano = '2011-06-01'group by f.id_consumidor, f.ID_SERVICO, c.nome, f.valororder by f.ID_CONSUMIDOR
Beleza, eu tenho os valores agrupados, e o retorno que eu tenho é esse:
ID NOME ID_servico Valor19 JOSE NONONONONO 1 62.0819 JOSE NONONONONO 2 49.6627 MAURO IAIAIAIAIAIA 1 18.9527 MAURO IAIAIAIAIAIA 2 15.1635 EDSON FULANO 1 16.8286 KKKKKKKKKKKK 5 4.49


Porém, eu preciso agora pegar o valor total da fatura, que contém todos os lançamentos de itens, e subtrair com a soma de cada tipo de serviço por consumidor, tirando do valor da fatura o total de multas e juros que terão o ID_servico 5 e 6. Eu não posso simplesmente lançar na exportação o valor da fatura total com multa e juros pois existe umas regras fiscais que pedem dessa desmembração.
Isso é para uma exportação que o governo exige agora, e para não ter que lançar todo mês na contabilidade manualmente (seria impossível), queria fazer um sistema em C# que automatizasse isso, por mês.Eu pensei em fazer essa consulta, jogar numa tabela como a abaixo:
Tabelacampo tipo id_consumidor numericovalor_fatura moedavalor_id_5 moedavalor_id_6 moedavalor_id_22 moedavalor_total_5 moedavalor_total_6 moedavalor_total_22 moeda
E depois fazer alguma outra programação para apresentar a exportação separada.
Alguém tem uma luz , alguma orientação pra me dar, agradeço de antemão.
Desculpem o tamanho do post mas pensei em explicar o máximo para poder entenderem minha dúvida.
Fábio. ;)


Fábio Paula

Fábio Paula

Responder

Posts

15/06/2011

Rafael Mattos

valor_id_5 moedavalor_id_6 moedavalor_id_22 moeda

eu não faria assim pq futuramente pode aparecer outros ID



eu faria assim

--------------------------------------
campo

id_consumidor numerico
data                          date
valor_fatura moeda
idservico                    numeric
valor_total                  moeda
--------------------------------------


eu alimentaria pela trigger, depois é só fazer um select por data que
vc pega o que vc quer


Responder

15/06/2011

Fábio Paula


valor_id_5 moedavalor_id_6 moedavalor_id_22 moeda

eu não faria assim pq futuramente pode aparecer outros ID

eu faria assim

--------------------------------------
campo

id_consumidor numerico
data                          date
valor_fatura moeda
idservico                    numeric
valor_total                  moeda
--------------------------------------


eu alimentaria pela trigger, depois é só fazer um select por data que
vc pega o que vc quer


 

Rafael, obrigado por responder... Eu pensei também nos campos com nome especifico, eu coloquei daquela maneira para explicar ao máximo.
Meu modo de pensar está correto?
Porém, o que você quis dizer com "eu alimentaria pela trigger"? Não possuo um conhecimento muito amplo em SQL, além do que eu corro atras em fórum da net...Poderia me explicar isso?
Abraços,
Fábio.
Responder

15/06/2011

Rafael Mattos

da uma lida vai te ajudar
http://www.linhadecodigo.com.br/artigo/2821/Trigger-Oracle-B%C3%A1sico.aspx

--------------------------------------------

para isso eu teria que conhecer mais sobre a estruturas da sua tabela.

mas vamos la vc teria que criar um trigger na After Insert da ITENS_FATURA alimentando essa tabela auxiliar,


seria bom vc acrecentar mais esses 2 campos ainda

id_itens_fatura                numerica
id_fatura                          numerico
id_consumidor numerico
data                          date
valor_fatura moeda
idservico                    numeric
valor_total                  moeda


-----------------------------------------------


serial algo mais ou menos assim

CREATE OR REPLACE TRIGGER trg_itens_fatura
BEFORE INSERT
ON itens_fatura
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN

INSERT INTO TABELA_AUXILIAR (id_itens_fatura
id_fatura   ,  
id_consumidor,
data         ,
valor_fatura,
idservico   ,
valor_total)
VALUES (NEW.IDITENSFATURA, NEW.FATURA, NEW.IDCONSUMIDOR, NEW.DATA, NEW.VALOR_FATURA,NEW.TOTAL);    

END IF;
END;




é que trabalho com firebird mais a ideia do funcionamento da trigger é a mesma
--------------------------------------------------------------------------------
Blog: http://mundodoprogramador.wordpress.com/
MSN: rafmattos@hotmail.com
Twitter: _rafmattos
Responder

15/06/2011

Fábio Paula

Rafael, sua resposta começou a me dar um horizonte, vou fazer uns testes. Li outras matérias sobre triggers, além dessa que você me indicou.
Pense no seguinte agora, por favor:
No primeiro select que eu executei, eu ordenei todos os lançamentos que o consumidor pode ter em sua conta, exemplificando melhor:
Id_Servico:
1 = valor base 5 = multa 6 = juros 9 = segunda via
Percebeu que mostra por consumidor o total de cada servico? o total do codigo 5 numa linha, o total do codigo 6 na outra e assim por diante?
Agora, na tabela nova afetada pelo "trigger" precisaria mostrar assim:
-------------------------------------------------Tabela Itens_Exportacao_TEMP
id_itens_fatura id_consumidor data     id_servico    valor_total   1 001 13/06/2011 1 10.00 2       001     13/06/2011           5 1.003       001     15/06/2011           6                             2.004       002     15/06/2011           1 10.005 ...6 ...----------------------------------------------------
Pra que? Pra fazer o cálculo: valor_correto = valor_fatura -  (multa +juros)...
Com isso eu gero o campo valor_correto, possivelmente uma outra tabela que receberá o seguinte definitivo:
--------------------------------------Tabela ITENS_EXPORTACAO
id_itens_fatura id_consumidor data       valor_fatura   valor_multa   valor_juros   valor_correto   1 001 16/06/2011  13.00      1.00        2.00            10.002       002     16/06/2011    21.00   10.00              1.00               10.003       003     16/06/2011   60.00                22.00             30.00             18.004       004     16/06/2011   14.00   3.00               1.00                10.00------------------------------------------
Porque assim? Porque eu preciso jogar os dados segmentados num layout txt para que possa ser importado por um sistema de contabilidade.
Acredito eu que preciso de dois triggers, correto? Um "depois" de inserir na itens_fatura e um "depois" de inserir na itens_exportacao_temp, gerando a itens_exportacao prontinha... Me corrija se estiver errado
Conseguiu me entender?
Abraços,
Fábio.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar