Em 9 de maio de 2011 08:37, Alberto Matos <albe...@pmibrasil.eti.br>escreveu:

> Bom dia a todos, gostaria de saber o que tem de errado nesta função.
>
>
> CREATE OR REPLACE FUNCTION public.fnc_execute_ddl(pddl TEXT) RETURNS
> BOOLEAN AS
> $body$
> DECLARE
>   lret BOOLEAN;
>   lsql TEXT;
> BEGIN
>   lret := FALSE;
>   BEGIN
>     EXECUTE pddl;
>     lret := TRUE;
>     COMMIT;
>   EXCEPTION
>     WHEN OTHERS THEN
>       lret := FALSE;
>       ROLLBACK;
>   END;
>   RETURN lret;
> END;
> $body$
> LANGUAGE 'plpgsql';
>
>
>
Dentro de uma pl/pgsql não é possível utilizar "COMMIT" e "ROLLBACK", pois
uma function no postgresql já é, por si só, uma transação.

Faça assim:


CREATE OR REPLACE FUNCTION public.fnc_execute_ddl(pddl TEXT) RETURNS BOOLEAN
AS
$body$
DECLARE
  lret BOOLEAN;
  lsql TEXT;
BEGIN
  lret := FALSE;
  BEGIN
    EXECUTE pddl;
    lret := TRUE;
  EXCEPTION
    WHEN OTHERS THEN
      lret := FALSE;
  END;
  RETURN lret;
END;
$body$
LANGUAGE 'plpgsql';

-- 
Fabrízio de Royes Mello
>> Blog sobre TI: http://fabriziomello.blogspot.com
>> Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Reply via email to