GARANTIR DESCONTO

Fórum Como criar uma função de inserção de dados no PostGres #27042

03/02/2009

0

Olá, tenho em firebirb a Stored Procedure abaixo, como podem ver ela faz o seguinte.

01 - recebe um parâmetro que a indica o que fazer com a tabela.

Se esse parametro for A - Ela faz um Update na Tabela
I - Ela insere dados na Tabela
D - Ela deleta os dados da tabela

Minha pergunta é a seguinte como eu faço uma como esta no PostGres pois eu ja consegui fazer Funções que Selecionam mas não consegui executar alterações na tabela como preciso.

Aluem pode me ajudar. Obrigado

===============================================

COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;

/* Stored procedures */

CREATE PROCEDURE ´MABATIDAS_PONTO´
(
´ID1´ INTEGER,
´ID2´ DATE,
´ID3´ TIME,
´VI_CODIGO_FUNCIONARIO´ INTEGER,
´VD_DATA´ DATE,
´VD_HORARIO´ TIME,
´VS_ALTERADO´ CHAR(1) CHARACTER SET ISO8859_1,
´TIPO´ VARCHAR(1) CHARACTER SET ISO8859_1
)
AS
BEGIN EXIT; END ^


ALTER PROCEDURE ´MABATIDAS_PONTO´
(
´ID1´ INTEGER,
´ID2´ DATE,
´ID3´ TIME,
´VI_CODIGO_FUNCIONARIO´ INTEGER,
´VD_DATA´ DATE,
´VD_HORARIO´ TIME,
´VS_ALTERADO´ CHAR(1) CHARACTER SET ISO8859_1,
´TIPO´ VARCHAR(1) CHARACTER SET ISO8859_1
)
AS
begin
if (:tipo = ´I´) then
begin
Insert into ´Batidas_Ponto´ (´Codigo_Funcionario´,
´Data´,
´Horario´,
´Alterado´
)
values (:VI_CODIGO_FUNCIONARIO,
:VD_DATA,
:VD_HORARIO,
:VS_ALTERADO
);
End
if (:tipo = ´A´) then
begin
Update ´Batidas_Ponto´ set ´Codigo_Funcionario´=:VI_CODIGO_FUNCIONARIO,
´Data´ =:VD_DATA,
´Horario´ =:VD_HORARIO,
´Alterado´ =:VS_ALTERADO
where (´Codigo_Funcionario´=:ID1) And (´Data´=:ID2) And (´Horario´=:ID3);
end
if (:tipo = ´D´) then
begin
Delete from ´Batidas_Ponto´ where (´Codigo_Funcionario´=:ID1) And (´Data´=:ID2) And (´Horario´=:ID3);
end
end
^

SET TERM ; ^
COMMIT WORK;
SET AUTODDL ON;


Amauridebarros

Amauridebarros

Responder

Posts

02/08/2010

Adimar

create or replace function MABATIDAS_PONTO(ID1 INTEGER, ID2 DATE, ID3 TIME, VI_CODIGO_FUNCIONARIO INTEGER, VD_DATA DATE, VD_HORARIO TIME, VS_ALTERADO CHAR(1) CHARACTER SET ISO8859_1,
TIPO CHAR(1) CHARACTER SET ISO8859_1)  RETURNS integer AS '
DECLARE  --uso de variáveis    --obs.: não é necessário desde que você não precise usar variáveis BEGIN    if (tipo = ´I´) then
   begin
       Insert into Batidas_Ponto (Codigo_Funcionario, Data, Horario, Alterado)
       values (VI_CODIGO_FUNCIONARIO, VD_DATA, VD_HORARIO, VS_ALTERADO);
   end;
      if (tipo = ´A´) then
   begin
        UPDATE Batidas_Ponto SET (Codigo_Funcionario=VI_CODIGO_FUNCIONARIO, Data =VD_DATA,
        Horario =VD_HORARIO, Alterado =VS_ALTERADO)
        WHERE (Codigo_Funcionario=ID1) And (Data=ID2) And (Horario=ID3);
   end;
       if (tipo = ´D´) then
    begin
         Delete from Batidas_Ponto where (Codigo_Funcionario=ID1) And (Data=ID2) And (Horario=ID3);
    end;       RETURN 1;  --DEVE SEMPRE EXISTIR POIS, TODA FUNÇÃO POSSUI   END;   'LANGUAGE plpgsql;
  OBS.: ATÉ ONDE SEI POSTGRE NÃO TEM COMMIT, LOGO TERA QUE SER FEITA NA QUERY PARA DAR REFRESH NA TABELA    
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar