Mas isso não é exclusão física ? Vou tentar alterar a exception others para
essa que me passou foreign_key_violation.

Em 16 de julho de 2010 10:38, JotaComm <[email protected]> escreveu:

> Olá,
>
> Que tal fazer um tratamento assim:
>
> Em 16 de julho de 2010 10:22, Torgge <[email protected]> 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 <[email protected]> escreveu:
>>
>> Olá,
>>>
>>>
>>>
>>> Em 16 de julho de 2010 08:56, Torgge <[email protected]> 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
>>>> [email protected]
>>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>>>
>>>>
>>>
>>> []s
>>> --
>>> JotaComm
>>> http://jotacomm.wordpress.com
>>>
>>> _______________________________________________
>>> pgbr-geral mailing list
>>> [email protected]
>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>>
>>>
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> [email protected]
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
> []s
> --
> JotaComm
> http://jotacomm.wordpress.com
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a