[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