Function funciona mas nao atualiza o banco
01/12/2005
0
Bem, criei esta função no EMS e ela executa sem erros, esstou programando em delphi com acesso via Zeus.
De dentro do programa ela é executa normalmente e na própria tela do meu eu constato atraves de grids q ela esta functionado (os valores do grid mudam apos o refresh). Muito bem, o problema é que se eu fechar e abrir o sistema ele volta o banco ao que estava antes... o que pode estar acontecendo ?
De dentro do programa ela é executa normalmente e na própria tela do meu eu constato atraves de grids q ela esta functionado (os valores do grid mudam apos o refresh). Muito bem, o problema é que se eu fechar e abrir o sistema ele volta o banco ao que estava antes... o que pode estar acontecendo ?
CREATE OR REPLACE FUNCTION "planejamento"."sp_atualiza_horas_timesheet" (p_tipooperacao integer, p_crachafunc integer, p_hrsnormal numeric, p_hrs75 numeric, p_hrs100 numeric, p_datalcto varchar, p_jobcard varchar) RETURNS boolean AS $body$ DECLARE TP_ATUALIZA_HORAS INTEGER; TP_EXCLUI_LCTO_TS INTEGER; nIDFunc INTEGER; lRETORNO BOOLEAN; nHORAS_DIMINUIR NUMERIC; nHORAS_ADICIONAR NUMERIC; nHORAS_DISPONIVEIS NUMERIC; recPONTO RECORD; BEGIN TP_ATUALIZA_HORAS := 0; TP_EXCLUI_LCTO_TS := 1; lRETORNO := FALSE; nIDFunc := 0; nHORAS_DIMINUIR := 0; nHORAS_ADICIONAR := 0; nHORAS_DISPONIVEIS := 0; -- Procura o ID do funcionario para atualizar do dados no ponto SELECT INTO nIDFunc f.id FROM pessoal.funcionario f WHERE f.cb = p_crachafunc; IF NOT FOUND THEN RAISE EXCEPTION ´Funcionário ¬ não cadastrado.´, nIDFunc; END IF; -- Recupera Horas Antigas Cadastradas SELECT INTO recPonto p.hrstotal, p.hrsusadas FROM pessoal.ponto p WHERE ( (id = nIDFunc) AND (dia = to_date(p_datalcto, ´dd/mm/yyyy´)) ); -- Descobre o total de horas a diminuir nHORAS_DIMINUIR := (recPonto.hrstotal) - (p_hrsnormal + p_hrs75 + p_hrs100); nHORAS_ADICIONAR := (p_hrsnormal + p_hrs75 + p_hrs100); nHORAS_DISPONIVEIS := (recPonto.hrstotal - recPonto.hrsusadas) - nHORAS_DIMINUIR; -- Verifica se o funcionário tem horas disponíveis para alocar no TS IF (p_hrsnormal + p_hrs75 + p_hrs100) > recPonto.hrstotal THEN RAISE EXCEPTION ´Horas a serem cadastradas no TimeSeet (¬) estouraram o número de horas que o funcionário tem disponíveis (¬) para serem alocadas na Jobcard ¬.´, nHORAS_ADICIONAR, nHORAS_DISPONIVEIS, p_jobcard; END IF; -- Verifica se ele tentou diminuir e foi além do número de horas IF nHORAS_DIMINUIR < 0 THEN RAISE EXCEPTION ´Horas aplicadas ao sistema excedem o valor mínimo de horas cadastradas ou trabalhadas pelo funcionario no dia (¬) e por isso passaram a ser negativas (¬)´, p_datalcto, nHORAS_DIMINUIR; END IF; -- Atualiza cadastro de ponto com as horas do TS UPDATE pessoal.ponto SET hrsusadas = hrsusadas - nHORAS_DIMINUIR WHERE ( (id = nIDFunc) AND (dia = to_date(p_datalcto, ´dd/mm/yyyy´)) ); -- Atualiza a Jobcard em referencia com o numero de horas tambem UPDATE planejamento.jc SET hhatingida = hhatingida - nHORAS_DIMINUIR WHERE jc = p_jobcard; -- Operacao de Alteracao de horas no TS IF TP_ATUALIZA_HORAS = p_tipooperacao THEN UPDATE planejamento.lancamentos SET hhnormal = p_hrsnormal, hhextra50 = p_hrs75, hhextra75 = p_hrs100 WHERE ( (data = to_date(p_datalcto, ´dd/mm/yyyy´)) AND (funcionario = p_crachafunc) AND (jc = p_jobcard) ); END IF; -- Operacao de Exclusao do lancamento IF TP_EXCLUI_LCTO_TS = p_tipooperacao THEN DELETE FROM planejamento.lancamentos WHERE ( (data = to_date(p_datalcto, ´dd/mm/yyyy´)) AND (funcionario = p_crachafunc) AND (jc = p_jobcard) ); END IF; IF nIDFunc > 0 THEN lRETORNO := TRUE; ELSE RAISE EXCEPTION ´Funcionário ¬ não cadastrado.´, nIDFunc; END IF; RETURN lRETORNO; END; $body$ LANGUAGE ´plpgsql´ VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
Tuskinhu
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)