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
