Fórum Triggers Encadeadas, dúvida #54088

05/12/2005

0

Olá amigos,

Tenho 3 tabelas: PRODUTO, GRADE e ESTOQUE.

na Grade eu relaciono COR e TAMANHO. Em Estoque eu digo os produtos e seus dados em cada empresa.

Então tenho as chaves primaris e as seguintes ligações entre elas.

PRODUTO GRADE ESTOQUE
PRO_CODIGO GRA_PRODUTO ETQ_PRODUTO
GRA_COR ETQ_COR
GRA_TAMANHO ETQ_TAMANHO
ETQ_EMPRESA

Todo produto que não tiver Grade (um CD, uma geladeira por exemplo) ele é incluído com COR = 1 e TAMANHO = 1 (informações padrões do sistema).

Tenho triggers que ao Incluir cliente ele já inclui a grade com COR 1 TAMANHO 1 e já inclui esta grade em todas as empresas na tabela ESTOQUE. Está funcinoando 110¬! muito bom mesmo!

Porém estou preocupado com a exclusão do produto. Hoje tenho as devidas triggers BEFORE DELETE em Grade e Produto apra fazer o inverso: Ao excluir o produto ele remove a grade e o estoque.

Porém digamos que um determinado produto, em sua cor X e tamanho Y esteja sendo referenciada em ITENS DE PEDIDO DE VENDA. Ao tentar excluir o produto ele irá executar as exclusões.

Minha pergunta: Digamos que o produto tem 20 cores e 5 tamanhos, o que dá 100 registros em Grade e 100 em Estoque (contando com 1 empresa). Se 1 deles estiver sendo usado ele vai dar erro. Ao dar o erro , a exclusão ficará até o ponto que deu erro ou nenhum dos 100 registros será afetado?

Neste caso eu gostaria que se der erro ele nao mexer em GRADE nem em ESTOQUE.

Vlw gente!

Abraços

Romulo Oliveira
Macaé/RJ


Romulocpd

Romulocpd

Responder

Posts

06/12/2005

Vinicius2k

Colega,

As triggers disparadas, não importando quantas serão, estarão no mesmo contexto da transação utilizada por você na tabela.

Você precisa assegurar-se de que não houve nenhum erro (através de bloco try...except, por exemplo) antes de commitar a transação e caso algo de errado tenha ocorrido um rollback na transação irá desfazer tudo que foi feito por você inicialmente e pelas triggers que foram disparadas.

T+


Responder

Gostei + 0

06/12/2005

Romulocpd

Olá :D ,

Realmente era como eu pensava. Então caso eu lance uma excessão dentro da Stored ou Trigger ela deverá ser tratada noDelphi e lá eu faço um Rollback.

Po.. show.. blz! Vlw!

Abração
Romulo Oliveira
Macaé/RJ


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar