[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