[firebase-br] RES: Log de transações
Tecnobyte Informática
temp2 em tecnobyte.com.br
Qui Out 25 17:52:02 -03 2012
Não é o caso. Não existe nenhum campo calculado na tabela onde estou
tentando executar INSERT e UPDATE.
Atenciosamente.
Daniel P. Guimarães
Tecnobyte Informática
www.tecnobyte.com.br
-----Mensagem Original-----
From: Zottis
Sent: Thursday, October 25, 2012 3:30 PM
To: 'FireBase'
Subject: [firebase-br] RES: Log de transações
Vê se você está tentando gravar em campos calculados
-----Mensagem original-----
De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Tecnobyte
Informática
Enviada em: quinta-feira, 25 de outubro de 2012 17:21
Para: lista em firebase.com.br
Assunto: [firebase-br] Log de transações
Boa tarde
Estou precisando fazer um log de todas as transações executadas no banco de
dados (Firebird 2.5.1). O código abaixo executa normalmente, mas em seguida,
quando vou iniciar uma nova transação, ocorre este erro:
attempted update during read-only transaction At trigger
'TG_TRANSACTION_START' line: 3, col: 3
Tentei usar transação autônoma para gravar o log, mas também não deu certo.
Alguém sabe como resolver este problema?
--
CREATE TABLE MON_TRANSACTIONS
(
ID INTEGER,
MON_TRANSACTION_ID INTEGER,
MON_ATTACHMENT_ID INTEGER,
MON_STATE INTEGER,
MON_START_TIMESTAMP TIMESTAMP,
MON_COMMIT_TIMESTAMP TIMESTAMP,
MON_TOP_TRANSACTION INTEGER,
MON_OLDEST_TRANSACTION INTEGER,
MON_OLDEST_ACTIVE INTEGER,
MON_ISOLATION_MODE SMALLINT,
MON_LOCK_TIMEOUT SMALLINT,
MON_READ_ONLY SMALLINT,
MON_AUTO_COMMIT SMALLINT,
MON_AUTO_UNDO SMALLINT,
CONSTRAINT PK_MON_TRANSACTIONS PRIMARY KEY(ID) );
CREATE SEQUENCE SQ_MON_TRANSACTIONS_ID;
SET TERM ^ ;
CREATE OR ALTER TRIGGER TG_TRANSACTION_START ON TRANSACTION START AS BEGIN
INSERT INTO MON_TRANSACTIONS(
ID,
MON_TRANSACTION_ID,
MON_ATTACHMENT_ID,
MON_STATE,
MON_START_TIMESTAMP,
MON_TOP_TRANSACTION,
MON_OLDEST_TRANSACTION,
MON_OLDEST_ACTIVE,
MON_ISOLATION_MODE,
MON_LOCK_TIMEOUT,
MON_READ_ONLY,
MON_AUTO_COMMIT,
MON_AUTO_UNDO)
SELECT
NEXT VALUE FOR SQ_MON_TRANSACTIONS_ID,
MON$TRANSACTION_ID,
MON$ATTACHMENT_ID,
MON$STATE,
CURRENT_TIMESTAMP,
MON$TOP_TRANSACTION,
MON$OLDEST_TRANSACTION,
MON$OLDEST_ACTIVE,
MON$ISOLATION_MODE,
MON$LOCK_TIMEOUT,
MON$READ_ONLY,
MON$AUTO_COMMIT,
MON$AUTO_UNDO
FROM MON$TRANSACTIONS
WHERE MON$TRANSACTION_ID = CURRENT_TRANSACTION; END^
CREATE OR ALTER TRIGGER TG_TRANSACTION_COMMIT ON TRANSACTION COMMIT AS BEGIN
UPDATE MON_TRANSACTIONS SET
MON_COMMIT_TIMESTAMP = CURRENT_TIMESTAMP
WHERE MON_TRANSACTION_ID = CURRENT_TRANSACTION; END^
Atenciosamente.
Daniel P. Guimarães
Tecnobyte Informática
www.tecnobyte.com.br
Mais detalhes sobre a lista de discussão lista