[firebase-br] Problema Com Alteração / Criação de Trigger

marcos thomaz marcosthomazs em yahoo.com.br
Sex Ago 17 10:59:39 -03 2007


Tenho a seguinte estrutura:
 
CREATE TABLE PAGAMENTOCLIENTES (
    ID       DM_ID NOT NULL /* DM_ID = INTEGER */,
    CAIXA    DM_ID NOT NULL /* DM_ID = INTEGER */,
    DATA     DM_DTNASC NOT NULL /* DM_DTNASC = DATE */,
    CLIENTE  DM_ID NOT NULL /* DM_ID = INTEGER */,
    VALOR    DM_VALORES NOT NULL /* DM_VALORES = NUMERIC(15,3) */,
    USUARIO  DM_ID NOT NULL /* DM_ID = INTEGER */
);
 
 
E um trigger para essa tabela:
SET TERM ^ ;
CREATE TRIGGER PAGAMENTOCLIENTES_AIUD0 FOR PAGAMENTOCLIENTES
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
AS
begin
  IF (DELETING OR UPDATING) THEN
    UPDATE CLIENTES SET DEBITO = COALESCE(DEBITO,0) + OLD.VALOR WHERE ID = OLD.CLIENTE;
  IF (INSERTING OR UPDATING) THEN
    UPDATE CLIENTES SET DEBITO = COALESCE(DEBITO,0) - NEW.VALOR WHERE ID = NEW.CLIENTE;
end
^
SET TERM ; ^
 
 
Então acrescentei um campo com o comando:
 
ALTER TABLE PAGAMENTOCLIENTES 
ADD VALORANTERIOR DM_VALORES;
 
Feito isto, tentei alterar o trigger de forma que ficasse assim:
SET TERM ^ ;
CREATE TRIGGER PAGAMENTOCLIENTES_AIUD0 FOR PAGAMENTOCLIENTES
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
AS
begin
  IF (DELETING OR UPDATING) THEN
    UPDATE CLIENTES SET DEBITO = COALESCE(DEBITO,0) + OLD.VALOR WHERE ID = OLD.CLIENTE;
SELECT DEBITO FROM CLIENTE WHERE ID = NEW.CLIENTE INTO NEW.VALORANTERIOR;
  IF (INSERTING OR UPDATING) THEN
    UPDATE CLIENTES SET DEBITO = COALESCE(DEBITO,0) - NEW.VALOR WHERE ID = NEW.CLIENTE;
end
^
SET TERM ; ^
 
 
Ao tentar compilar aparece a seguinte mensagem de erro:
 
This column cannot be updated because it is derived from an SQL function or expression.
attempted update of read-only column.
 
 
 
E após isso acontecer, mesmo eu dando um rollback, essa tabela fica como ReadOnly. Esse quadro apenas se desfaz, ou seja, a tabela volta a poder ser acessada, apenas quando removo o campo que criei (Valoranterior). Fiz uma pesquisa na Internet pra ver o possível erro, porém o que encontrei foi a informação de que, isso era decorrente da tentativa de alterar um campo calculado (computed by ), o que não é meu caso. O estranho é que já fiz backup e restaurei, passei o GFix, Recriei todo o banco, e o erro persiste. Alguém poderia me ajudar?
 
Uso Firebird 2.0


      Flickr agora em português. Você clica, todo mundo vê.
http://www.flickr.com.br/


Mais detalhes sobre a lista de discussão lista