[firebase-br] Trigger não tá fazendo o UPDATE

Romulo Oliveira romulocpd em yahoo.com.br
Sex Dez 30 14:12:28 -03 2005


Fagner,

Os registros existem. Criei alguns registros somente pra teste.  E com a 
  Integridade ta tudo certinho pois se entrei na tabela MOV_ESTOQUE com 
EMPRESA, PRODUTO, COR, TAMANHO é pq isso existe em ESTOQUE pois tenho 
uma FK para isso.

E o valor nao ta sendo gerado pois qd jogo na tabela LOG ele lista os 
valores certinhos:

 > EMPRESA = 4 PRODUTO = 10 COR = 1TAMANHO = 1 SALDO ATUAL = 5180.0000

Tive que mudar, tirei a Trigger e joguei a tualização na Stored de 
INCLUIRMOVIMENTOESTOQUE daí ficou certinho.

Vlw!
Romulo


Fagner Araujo wrote:
> O que pode esta acontecendo é que na sua tabela ESTOQUE pode não existir nenhum registro com essas informações:
>   
>     ETQ_EMPRESA = NEW.MES_EMPRESA AND
>     ETQ_PRODUTO = NEW.MES_PRODUTO AND
>     ETQ_COR = NEW.MES_PRODUTO AND
>     ETQ_TAMANHO = NEW.MES_TAMANHO;
>   
>   que são a base do WHERE do UPDATE.
>   A outra possibilidade é uma TRIGGER na tabela ESTOQUE esta redefinindo a valor do campo.
>   Faça essas checagens que você encontrará a falha.
>   
>   Atenciosamente,
>     Fagner Araújo.
>   
> Romulo Oliveira <romulocpd em yahoo.com.br> escreveu:  Olá amigos,
> 
> Tenho uma tabela MOV_ESTOQUE onde ela atualiza o estoque do produto em 
> outra tabela.  Cada lançamento de MOV_ESTOQUE eu digo o saldo anterior, 
> quantidade movimentada e o saldo atual.  A trigger pega este campo SALDO 
> ATUAL e joga na tabela ESTOQUE.
> 
> A Trigger tá assim:
> 
> CREATE TRIGGER TG_AOINCMES FOR MOV_ESTOQUE
> ACTIVE AFTER INSERT POSITION 0
> AS
> begin
> 
>      INSERT INTO LOG VALUES ('EMPRESA = ' || CAST(NEW.MES_EMPRESA AS 
> VARCHAR(10)) || ' PRODUTO = ' || CAST(NEW.MES_PRODUTO AS VARCHAR(10)) || 
> ' COR = ' || CAST(NEW.MES_COR AS VARCHAR(10)) || 'TAMANHO = ' || 
> CAST(NEW.MES_TAMANHO AS VARCHAR(10)) || ' SALDO ATUAL = ' || 
> CAST(NEW.MES_SALDOATUAL AS VARCHAR(20)));
> 
>      UPDATE
>          ESTOQUE
>      SET
>          ETQ_ATUAL = NEW.MES_SALDOATUAL
>      WHERE
>          ETQ_EMPRESA = NEW.MES_EMPRESA AND
>          ETQ_PRODUTO = NEW.MES_PRODUTO AND
>          ETQ_COR = NEW.MES_PRODUTO AND
>          ETQ_TAMANHO = NEW.MES_TAMANHO;
> 
> END
> 
> Vejam que coloquei eset INSERT numa tabela LOG só pra saber.  O 
> resultado tá assim (da tabela LOG):
> 
> EMPRESA = 4 PRODUTO = 10 COR = 1TAMANHO = 1 SALDO ATUAL = 5180.0000
> 
> Poxa, pelo comando ele diz a empresa, produto, cor, tamanho e o saldo. 
> Tudo certinho!  Porém o UPDATE ele nao ta executando.
> 
> A minha tabela de MOV_ESTOQUE é assim:
> 
> CREATE TABLE MOV_ESTOQUE (
>      MES_CODIGO         INTEGER NOT NULL,
>      MES_EMPRESA        INTEGER NOT NULL,
>      MES_EMPRESAORIGEM  INTEGER NOT NULL,
>      MES_PRODUTO        INTEGER NOT NULL,
>      MES_COR            INTEGER NOT NULL,
>      MES_TAMANHO        INTEGER NOT NULL,
>      MES_DATALANC       DATE NOT NULL,
>      MES_TIPO           CHAR(3) NOT NULL,
>      MES_DOCUMENTO      VARCHAR(20),
>      MES_HISTORICO      VARCHAR(60) NOT NULL,
>      MES_SALDOANTERIOR  NUMERIC(18,4) DEFAULT '0',
>      MES_QTDLANC        NUMERIC(18,4) DEFAULT '0',
>      MES_SALDOATUAL     NUMERIC(18,4) DEFAULT '0'
> );
> 
> Po, já tentei de tudo.  Fiz a tabela de log pra ver e ele pega os 
> valores direito e os registros existem certinho na tabela ESTOQUE. 
> Vejam a tabela ESTOQUE:
> 
> CREATE TABLE ESTOQUE (
>      ETQ_EMPRESA              INTEGER NOT NULL,
>      ETQ_PRODUTO              INTEGER NOT NULL,
>      ETQ_COR                  INTEGER NOT NULL,
>      ETQ_TAMANHO              INTEGER NOT NULL,
>      ETQ_PRECOCUSTO           DECIMAL(10,2),
>      ETQ_FRETE                DECIMAL(6,2),
>      ETQ_IPI                  DECIMAL(6,2),
>      ETQ_DIFICMS              DECIMAL(6,2),
>      ETQ_DESPOPER             DECIMAL(6,2),
>      ETQ_ICMS                 DECIMAL(6,2),
>      ETQ_LUCRO                DECIMAL(6,2),
>      ETQ_PROMOCAO             DECIMAL(6,2),
>      ETQ_VALIDADEPROMOCAO     DATE,
>      ETQ_PRECOCUSTOGERENCIAL  DECIMAL(10,2),
>      ETQ_PRECOVENDASUGERIDO   DECIMAL(10,2),
>      ETQ_PRECOVENDA           DECIMAL(10,2),
>      ETQ_PRECOVENDAPROMOCAO   DECIMAL(10,2),
>      ETQ_ATUAL                DECIMAL(18,4) default 0,
>      ETQ_RESERVADO            DECIMAL(18,4) default 0,
>      ETQ_COMPRADO             DECIMAL(18,4) default 0,
>      ETQ_DISPONIVEL           DECIMAL(18,4) default 0,
>      ETQ_AVARIADO             DECIMAL(18,4) default 0,
>      ETQ_CONSIGNADO           DECIMAL(18,4) default 0,
>      ETQ_MINIMO               NUMERIC(18,4) DEFAULT '0'
> );
> 
> Vlw pessoal!
> 
> Romulo





Mais detalhes sobre a lista de discussão lista