Em 9 de maio de 2011 08:37, Alberto Matos <[email protected]>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
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral