Posso criar uma SP com três tabelas
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.
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
Curtidas 0
Respostas
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
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
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
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
14/12/2004
Não sei nem como lhe agradecer!!
vou testar aqui, qualquer coisa, posto aqui novamente.
Muito obrigado!
vou testar aqui, qualquer coisa, posto aqui novamente.
Muito obrigado!
GOSTEI 0
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
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
14/12/2004
Sim, você pode usar WHILE numa SP.
GOSTEI 0
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?
Valew pela força!!!
O While DO na SP ficaria +/- assim?
While <Expressão> Do Begin <Comandos> end
Valew pela força!!!
GOSTEI 0
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!
[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
14/12/2004
O While DO na SP ficaria +/- assim?
While <Expressão> Do Begin <Comandos> end
Sim.
GOSTEI 0