Posso criar uma SP com três tabelas

14/12/2004

0

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

Responder

Posts

14/12/2004

Gandalf.nho

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.


Responder

14/12/2004

Martins

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]


Responder

14/12/2004

Gandalf.nho

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


Responder

14/12/2004

Martins

Não sei nem como lhe agradecer!!

vou testar aqui, qualquer coisa, posto aqui novamente.

Muito obrigado!


Responder

14/12/2004

Gandalf.nho

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


De nada :D


Responder

16/12/2004

Martins

[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!


Responder

16/12/2004

Gandalf.nho

Sim, você pode usar WHILE numa SP.


Responder

17/12/2004

Martins

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!!!


Responder

17/12/2004

Martins

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!


Responder

17/12/2004

Gandalf.nho

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


Sim.


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