Olá,

Que tal fazer um tratamento assim:

Em 16 de julho de 2010 10:22, Torgge <tor...@gmail.com> escreveu:

> Isso é para exclusão lógica, meu campo ativo controla isso. Porém faço o
> delete para verificar se o registro esta linkado a alguma
> outra tabela, se o comando delete der exception quer dizer que não posso
> exclui-lo então "não posso exclui-lo logicamente tb",
> se não der exception no delete, quer dizer que "eu posso exclui-lo
> logicamente", o problema é que esta dando exception no
> update. Então sempre esta retornando false, quando executo essa function no
> debug do (EMS Postgres) ele retorna true,
> mas quando executo ele normalmente retorna false.
>

Que tal fazer um tratamento assim:

CREATE OR REPLACE FUNCTION f_delete(INTEGER)

RETURNS BOOLEAN AS $$

BEGIN

    BEGIN

    DELETE FROM tabela WHERE codigo=$1;

    EXCEPTION WHEN foreign_key_violation THEN

        RAISE NOTICE 'Registro % não pode ser excluído.',$1;

        RETURN FALSE;

    END;

RAISE NOTICE 'Registro pode ser excluído: %',$1;

RETURN TRUE;

END;

$$ LANGUAGE PLPGSQL RETURNS NULL ON NULL INPUT;


> Em 16 de julho de 2010 09:05, JotaComm <jota.c...@gmail.com> escreveu:
>
> Olá,
>>
>>
>>
>> Em 16 de julho de 2010 08:56, Torgge <tor...@gmail.com> escreveu:
>>
>> Bom dia.
>>> Uma dúvida com a uma funcion:
>>> CREATE OR REPLACE FUNCTION padrao.moeda_d
>>> (
>>>   nid  integer
>>> )
>>> RETURNS boolean AS
>>> $$
>>> begin
>>>     if (nid is not null) then
>>>         savepoint p1;
>>>
>>>             delete from padrao.moeda
>>>                 where padrao.moeda.id = nid;
>>>
>>>        rollback to p1;
>>>
>>>         update padrao.moeda set
>>>             ativo = 0,
>>>             datalt = now()
>>>         where id = nid;
>>>
>>>     end if;
>>>
>>>     RETURN TRUE;
>>>
>>> exception
>>>     when others then
>>>         RETURN false;
>>> end;
>>> $$
>>> LANGUAGE 'plpgsql'
>>> VOLATILE
>>> CALLED ON NULL INPUT
>>> SECURITY INVOKER
>>> COST 100;
>>>
>>> Ela sempre retorna false, quando passa pelo update da exception, alguma
>>> sugestão de como fazer corretamente ?
>>>
>>
>> Sempre que cair na excpetion vai retornar false. Não isso que você quer?
>>
>> O que você quer fazer exatamente? Não entendi muito bem sua idéia, pois
>> você faz um delete e depois faz o rollback para o seu savepoint definido e
>> depois faz um update. Poderia explicar sua idéia, assim fica mais fácil
>> ajudarmos.
>>
>>>
>>> _______________________________________________
>>> pgbr-geral mailing list
>>> pgbr-geral@listas.postgresql.org.br
>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>>
>>>
>>
>> []s
>> --
>> JotaComm
>> http://jotacomm.wordpress.com
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> pgbr-geral@listas.postgresql.org.br
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>

[]s
-- 
JotaComm
http://jotacomm.wordpress.com
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a