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;
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
Curtir tópico
+ 0
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
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
Clique aqui para fazer login e interagir na Comunidade :)