Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

thiagocruz

Problemas com Stored Procedure e Function

Recommended Posts

Olá pessoal estou precisando de uma ajuda muito grande... estou começando a usar o Oracle, antes usava o FiriBird Estou querendo que minha Stored Procedure e minha Function retornem registros, Como 'Cursores", Estou querendo fazer um relatorio Comparativo de periodos... só da uma olhada na Procedure

CREATE OR REPLACE PROCEDURE RELATGER1_COMPARATIVO_VENDAS   (P_DATAINI IN DATE,P_DATAFIM IN DATE,P_IDEMPRESA IN NUMBER)AS    CURSOR CLIENTES_P_ATUAL    IS           SELECT P.IDcliente, C.Descricao DescCliente, UF.IDUF, UF.descricao DescUF,                TRUNC(SUM(P.TotalPedido/1000)) Liquido, SUM(PO.Qtde) Qtde, E.IDEMPRESA          FROM  DBA_EGK.NotaFiscal NF, DBA_EGK.Pedido P,                DBA_EGK.Cliente C, DBA_EGK.PedidoObra PO,                DBA_EGK.UF UF, DBA_EGK.EMPRESA E          WHERE NF.Data BETWEEN P_DATAINI                 AND P_DATAFIM				AND NF.Status <> 'CN'                AND NF.IDPedido = P.IDPedido                AND P.IDPedido = PO.IDPedido                AND P.IDCliente = C.IDCliente                AND C.IDUFEnt = UF.IDUF				AND P.IDEMPRESA = E.IDEMPRESA				AND E.IDEMPRESA = P_IDEMPRESA            GROUP BY P.IDcliente, C.Descricao, UF.IDUF, UF.descricao, E.IDEMPRESA          ORDER BY C.Descricao;									  CURSOR CLIENTES_P_ANTERIOR(P_IDCLIENTE NUMBER, P_IDUF NUMBER)   IS          SELECT TRUNC(SUM(P.TotalPedido/1000)) Liquido, SUM(PO.Qtde) Qtde         FROM  DBA_EGK.NotaFiscal NF, DBA_EGK.Pedido P,                DBA_EGK.Cliente C, DBA_EGK.PedidoObra PO         WHERE NF.Data BETWEEN ADD_MONTHS(P_DATAINI , -12)               AND ADD_MONTHS(P_DATAFIM, -12)               AND NF.Status <> 'CN'               AND NF.IDPedido = P.IDPedido               AND P.IDPedido  = PO.IDPedido               AND P.IDCliente = C.IDCliente               AND P.IDCliente = P_IDCLIENTE			   AND P.IDEMPRESA = P_IDEMPRESA               AND C.IDUFEnt = P_IDUF;			     V_ACUM_ANTERIOR      NUMBER; -- Valor Acumalativo do Ano Anterior  V_ANTERIOR           NUMBER; -- Valor do Registro do ano Anterior    V_ACUM_ATUAL         NUMBER;  -- Valor Acumalativo do Ano   V_ATUAL              NUMBER;  -- Valor Atual do Registro      V_VARIACAO_QTDE      NUMBER;  -- Variação de Quantidade  atual.qtde /Anterior.qtde -1   V_VARIACAO_MONETARIA NUMBER;  -- Variação de Monetaria   atual.monetario / Anterior.monetario   -1  			     	   								 BEGIN	FOR REG_ATUAL IN CLIENTES_P_ATUAL	LOOP	   V_ATUAL      := REG_ATUAL.LIQUIDO;	   V_ACUM_ATUAL := V_ACUM_ATUAL + REG_ATUAL.LIQUIDO;  --Valor Acumado mais o novo valor.    	   FOR REG_ANTERIOR IN CLIENTES_P_ANTERIOR(REG_ATUAL.IDCLIENTE, REG_ATUAL.IDUF) LOOP    	        	   V_ANTERIOR           := REG_ANTERIOR.LIQUIDO;	       V_ACUM_ANTERIOR      := V_ACUM_ANTERIOR + REG_ANTERIOR.LIQUIDO; --ACUMULATIVO		              V_VARIACAO_QTDE      := (REG_ATUAL.QTDE/REG_ANTERIOR.QTDE)-1;  -- VARIAÇÃO QTDE           V_VARIACAO_MONETARIA := (REG_ATUAL.LIQUIDO/REG_ANTERIOR.LIQUIDO)-1; -- VARIAÇÃO MONETARIA	   END LOOP;	END LOOP; 	END RELATGER1_COMPARATIVO_VENDAS; 		

E outra pergunta tem como criar uma tabela temporario... mais não solida... virtual...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.