GARANTIR DESCONTO

Fórum Problema na Alteração de Trigger #58692

14/08/2007

0

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


Thomaz_prg

Thomaz_prg

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar