Re: [pgbr-geral] En: Re: Trigger e Function no PostgreSql

2007-07-20 Por tôpico Diego Medeiros

Em 19/07/07, Edinho - Analista <[EMAIL PROTECTED]> escreveu:


Estou tentando compilar essas trigger e function esta dando erro!
o que pode esta errado:



Qual o erro? No chutômetro fica difícil.

CREATE FUNCTION prc_valida_estoque(integer, integer) RETURNS INTEGER AS $$

DECLARE
PCOD_MEDIC ALIAS $1;



Aqui não seria  PCOD_MEDIC ALIAS FOR $1;

PQTDE_MEDIC ALIAS FOR $2;

vestoque INTEGER;
BEGIN
select into vestoque estoque
from medicamentos
where cd_medicamento = :pcod_medic;

-- PL/pgsql nao tem excecoes, entao faremos a funcao retornar -1
-- em caso de falha e 1 em caso de sucesso

if (:pqtde_medic > :vestoque) then
RETURN -1;

RETURN 1;
END;
$$ LANGUAGE plpgsql;



--
Diego Monteiro Medeiros de Araújo
Analista Programador Web
Tel. : (11) 6166-3077
Cel.:  (11) 7653-9911
TELEFÔNICA - TELECOMUNICAÇÕES DE SÃO PAULO
DYP01 - Gerência de Suporte e Desenvolvimento de Sistemas
Diretoria de Gestão de Redes
R. Xavier Curado, 473  -  9º andar
CEP: 04210-100 - Ipiranga - São Paulo - SP
http://www.telefonica.com.br
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] En: Re: Trigger e Function no PostgreSql

2007-07-19 Por tôpico Edinho - Analista
Estou tentando compilar essas trigger e function esta dando erro!
o que pode esta errado:

CREATE FUNCTION prc_valida_estoque(integer, integer) RETURNS INTEGER AS  $$
DECLARE 
PCOD_MEDIC ALIAS $1;
PQTDE_MEDIC ALIAS FOR $2;
vestoque INTEGER;
BEGIN
select into vestoque estoque
from medicamentos
where cd_medicamento = :pcod_medic;

-- PL/pgsql nao tem excecoes, entao faremos a funcao retornar -1
-- em caso de falha e 1 em caso de sucesso

if (:pqtde_medic > :vestoque) then
RETURN -1;

RETURN 1;
END;
$$ LANGUAGE plpgsql;


Triggers tem que ser implementados como funcoes especiais sem argumentos
que retornam o tipo TRIGGER.
http://www.postgresql.org/docs/8.2/static/plpgsql-trigger.html

CREATE FUNCTION deletar_item_ordem_saida() RETURNS TRIGGER AS $$
BEGIN
-- Tens certeza que a WHERE clause ta' certa?
UPDATE medicamentos SET estoque = estoque + OLD.qtde_medic
WHERE cd_medicamento = OLD.qtde_medic;

-- Retornamos NULL por que e' um AFTER trigger
RETURN NULL;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER deletar_item_ordem_saida
AFTER DELETE ON item_ordem_saida
FOR EACH ROW EXECUTE PROCEDURE deletar_item_ordem_saida();


Assunto: Re: [pgbr-geral] Trigger e Function no PostgreSql

 On Fri, Jul 13, 2007 at 11:44:28PM -0300, Edinho - Analista wrote:
> Gelera!
> 
> Estou querendo migrar o sistema que tenho em firebird para Postgresql e estou 
> enfrentado dificuldades com trigger e function no postgresql ,ja que no post 
> é diferente .Preciso mudas estas abaixo e não estou conseguindo existe pouca 
> referencia na net sobre o assunto.

A documentacao do PL/pgsql te ajudaria bastante. Lembrando que podes usar
outras linguagens alem do PL/pgsql, como PL/Python, PL/PHP, PL/Perl,
PL/Java etc. Vou converter uns dois para te ajudar, mas tens que ler a
documentacao para terminar o servico.

http://www.postgresql.org/docs/8.2/static/plpgsql.html

CREATE FUNCTION prc_valida_estoque(integer, integer) RETURNS INTEGER AS  $$
DECLARE 
PCOD_MEDIC ALIAS $1;
PQTDE_MEDIC ALIAS FOR $2;
vestoque INTEGER;
BEGIN
select into vestoque estoque
from medicamentos
where cd_medicamento = :pcod_medic;

-- PL/pgsql nao tem excecoes, entao faremos a funcao retornar -1
-- em caso de falha e 1 em caso de sucesso

if (:pqtde_medic > :vestoque) then
RETURN -1;

RETURN 1;
END;
$$ LANGUAGE plpgsql;


Triggers tem que ser implementados como funcoes especiais sem argumentos
que retornam o tipo TRIGGER.
http://www.postgresql.org/docs/8.2/static/plpgsql-trigger.html

CREATE FUNCTION deletar_item_ordem_saida() RETURNS TRIGGER AS $$
BEGIN
-- Tens certeza que a WHERE clause ta' certa?
UPDATE medicamentos SET estoque = estoque + OLD.qtde_medic
WHERE cd_medicamento = OLD.qtde_medic;

-- Retornamos NULL por que e' um AFTER trigger
RETURN NULL;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER deletar_item_ordem_saida
AFTER DELETE ON item_ordem_saida
FOR EACH ROW EXECUTE PROCEDURE deletar_item_ordem_saida();

-Roberto

-- 
Examinations are formidable even to the best prepared, for
even the greatest fool may ask more the the wisest man can answer.
  -- C. C. Colton
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




Assine - [EMAIL PROTECTED]
   Flickr agora em português. Você cria, todo mundo vê. Saiba mais.___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral