Posso criar uma SP com três tabelas

Firebird

14/12/2004

Olá pessoal!

Quero saber se posso escrever uma SP no Interbase ou Fire, com 3 tabelas, é q tô precisando escrever uma SP q faça uns calculos para mim e lance os resultados em uma tabela, tipo, somar todos o proventos de um funcionário, verificar a alíquota do INSS, calcular o valor, somar os descontos, e lançar os dados em uma tabela (Table3), isso para todos os funcionários q tiver cadastrado na minha Tabela TbFunci, se alguém puder me dar uma ajuda, fico muito agradecido.

Se alguém souber me dizer se é melhor fazer isso com código Delphi e como se faz, agradeço tb.


Martins

Martins

Curtidas 0

Respostas

Gandalf.nho

Gandalf.nho

14/12/2004

Tecnicamente você pode escrever uma SP envolvendo quantas tabelas você quiser. Quanto ao código, eu acharia melhor como SP mesmo, principalmente se for para rodar em rede.


GOSTEI 0
Martins

Martins

14/12/2004

Tecnicamente você pode escrever uma SP envolvendo quantas tabelas você quiser. Quanto ao código, eu acharia melhor como SP mesmo, principalmente se for para rodar em rede.


Obrigado pelo ajuda!!

Vc poderia me dar uma dica de como eu escreveria essa SP, as 3 tabelas são Funcionarios, Aliquotas e DigitaPdr, tenho q somar todos os proventos de um funcionário e verificar em qual alíquota ele está para poder calcular o INSS, feito isso, tenho q lancar os calculos desse funcionário na tabela DigitaPdr, e só então passar para o funcionário seguinte.

Aceito sugestões, pois não estou conseguindo pensar em mais nada, essa semana tô burrinho!!!

Mais uma vez valeu [b:f50b53c673]gandalf.nho[/b:f50b53c673]


GOSTEI 0
Gandalf.nho

Gandalf.nho

14/12/2004

Você teria que fazer um laço FOR SELECT... DO que passasse um por um os funcionários e executasse as operações necessárias. Um exemplo fictício:

CREATE PROCEDURE CALCULA_INSS (
parâmetros_entrada (se tiver)
)
RETURNS (
parâmetros_saída (se tiver)
)
AS
DECLARE VARIABLE codigo_funcionario INTEGER;
DECLARE VARIABLE aliquota DOUBLE PRECISION;
DECLARE VARIABLE soma_proventos DOUBLE PRECISION;
BEGIN
FOR SELECT CODIGO_FUNCIONARIO, ALIQUOTA, SUM(PROVENTOS)
FROM tabela INTO :codigo_funcionario, :aliquota, :soma_proventos DO
BEGIN
/* Aqui você usará os valores e fará seus cálculos */
END
END


GOSTEI 0
Martins

Martins

14/12/2004

Não sei nem como lhe agradecer!!

vou testar aqui, qualquer coisa, posto aqui novamente.

Muito obrigado!


GOSTEI 0
Gandalf.nho

Gandalf.nho

14/12/2004

Não sei nem como lhe agradecer!! vou testar aqui, qualquer coisa, posto aqui novamente. Muito obrigado!


De nada :D


GOSTEI 0
Martins

Martins

14/12/2004

[quote:1ed3587374=´Martins´]Não sei nem como lhe agradecer!! vou testar aqui, qualquer coisa, posto aqui novamente. Muito obrigado!


De nada :D[/quote:1ed3587374]

Gandalf.nho, iz como vc me sugeriu, mas estava vendo o seguinte:
CREATE PROCEDURE CALCULA_INSS ( 
parâmetros_entrada (se tiver) 
) 
RETURNS ( 
parâmetros_saída (se tiver) 
) 
AS 
DECLARE VARIABLE codigo_funcionario INTEGER; 
DECLARE VARIABLE aliquota DOUBLE PRECISION; 
DECLARE VARIABLE soma_proventos DOUBLE PRECISION; 
BEGIN 
FOR SELECT CODIGO_FUNCIONARIO, ALIQUOTA, SUM(PROVENTOS) 
FROM tabela INTO :codigo_funcionario, :aliquota, :soma_proventos DO 
BEGIN 
/* Aqui você usará os valores e fará seus cálculos */ 
END 
END


Desse jeito eu estaria agrupando(somando) todos os valores de proventos, tudo bem me será util, mas antes tenho q inserir em outra tabela os dados dos funcinários vou exemplificar:

COD EVENTO DESCR_EVENTO TIPO VALOR PROV DESC
===========================================
001 010 SALARIO BASE P 260,00 260,00 0,00
001 030 FALTAS D 0,00 0,00 25,00

002 ......

COD = codigo do funcionário, todos teram eventos lançados +/- assim, após o lançamento, devo fazer o processamento, a parte q irá calcular os descontos do INSS e IRRF, já iz isso usando código Delphi dentro do Projeto, mas queria fazer isso no BD, pois rodando em um servidor ficaria bem mais rápido, pois bem após o processamento ficaria assim no DBGrid.

COD EVENTO DESCR_EVENTO TIPO VALOR PROV DESC
===========================================
001 010 SALARIO BASE P 260,00 260,00 0,00
001 030 FALTAS D 25,00 0,00 25,00
001 060 INSS D 19,89 0,00 19,89
001 100 TOTAL DESC A 44,89 0,00 44,89
001 101 TOTAL PROV A 260,00 260,00 0,00
001 102 LIQUIDO A 215,11 215,11 0,00

002 ......

O mesmo pro funcionário 002, 003, etc, com código Delphi eujá fiz funcionar usando [b:1ed3587374]While Do[/b:1ed3587374], gostaria de saber se com essa SP, posso fazer algo parecido, tipo incluir os dados e só depois somar(proventos) para calcular INSS, calcular(Descontos) para obter o líquido?

Posso usar While dentro de uma SP?

Mais uma vez, muito obrigado!


GOSTEI 0
Gandalf.nho

Gandalf.nho

14/12/2004

Sim, você pode usar WHILE numa SP.


GOSTEI 0
Martins

Martins

14/12/2004

Muito obirgado novamente, vou fazer aqui, usando códigos (pascal) Delphi, consegui o resultado q esperava, não ficou bem otmizado mas resolve o meu problema, vou tentar escrever uma SP, usando a mesma lógica.

O While DO na SP ficaria +/- assim?
While <Expressão> Do
Begin
   <Comandos>
end


Valew pela força!!!


GOSTEI 0
Martins

Martins

14/12/2004

Para quem está vendo esta mensagem, olhem essa postagem no forum delphi:
[url]http://delphiforum.icft.com.br/forum/viewtopic.php?p=176388#176388[/url]

Conto com os comentários e correções de vcs!

Obrigado!


GOSTEI 0
Gandalf.nho

Gandalf.nho

14/12/2004

O While DO na SP ficaria +/- assim?
While <Expressão> Do
Begin
   <Comandos>
end


Sim.


GOSTEI 0
POSTAR