[firebase-br] RES:  Log de transações
    Zottis 
    bzottis em ig.com.br
       
    Qui Out 25 17:30:30 -03 2012
    
    
  
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
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br Para
saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
    
    
Mais detalhes sobre a lista de discussão lista