[firebase-br] Erro de Deadlock

Wesley Oliveira wesley em rgsystem.com.br
Seg Maio 26 10:43:58 -03 2014


Olá pessoal!

 

Estou com uma situação um tanto quanto desagradável.

 

Tenho uma função chamada PRO_RETORNA_ID que me traz o próximo ID utilizável
de uma tabela passada via parâmetro e atualiza uma tabela “contadora” com
esses registros.

O problema é o seguinte: quando eu chamo uma função para encerrar o ano
letivo da escola em dois computadores diferentes (são dois anos diferentes
também), o sistema passa por todos os alunos do ano letivo gerando o
histórico.

Para salvar o histórico no banco, é chamada a função PRO_RETORNA_ID uma
única vez para cada aluno. Eu estava com erro de deadlock antes e,
manipulando a maneira como a função é chamada, consegui parar com esse
problema, entretanto, comecei a receber um erro de violação de chave
primária.

 

Para tentar resolver o problema, fiz uma trigger no BeforeInsert da tabela
de Históricos que é a seguinte:

 

DECLARE VARIABLE TEM INTEGER;

BEGIN

SELECT COUNT(*) FROM TSI_HISTORICO WHERE CSI_CODHIS = NEW.CSI_CODHIS INTO
:TEM;

 

IF (TEM > 0) THEN

BEGIN

NEW.CSI_CODHIS = (SELECT RESULTADO FROM PRO_RETORNA_ID('TSI_HISTORICO',
'CSI_CODHIS'));

END

END

 

Porém, agora eu recebo o erro de Deadlock transaction novamente... Já
procurei várias maneiras de fazer o tratamento das transações tanto na
procedore quanto na trigger mas nada resolveu. Inclusive encontrei uma
página que mostra uma sentença assim:        IN AUTONOMOUS TRANSACTION DO
(...)

Mas também não funcionou...

 

Alguém tem alguma idéia de como resolver essa questão?

 

Att.

Wesley Oliveira
Programador de Sistemas de Informação

RG System Informática
Fone:      +55 (27) 3727-1127
Celular:    +55 (27) 99606-0038



 

 




Mais detalhes sobre a lista de discussão lista