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

Responder a