mas tem q ter tempo pra ler td isso né??
pq vc nao manda soh a procedure ou trigger q ta dando problema... e 
explica direito esse negócio de corrompendo.. corromprendo como? o 
problema é com a integridade dos dados ou com a estrutura da tabela??

o/

Em 22/05/2010 10:56, Iran Lima escreveu:
> Olá Pessoal,
>
> Estou com um problema aqui que começou após criar umas Procedures e 
> Triggers
> para controle de Estoque.
>
> Criei uma tabela de movimentação de produtos e nela as triggers de
> atualização de estoque na tabela do produto.
>
> Para gravar a movimentação do produto uso uma SP que passado um pedido 
> como
> parâmetro lança todos os itens do mesmo na tabela de movimentação
>
> Funcionou tudo certo como eu desejava porem a tabela de movimentação do
> produto começou a corromper.
>
> Se alguém poder me ajudar serei muito grato.
>
> /***************************************************************************
> ***/
>
> /**** Stored Procedures
> ****/
>
> /***************************************************************************
> ***/
>
> CREATE PROCEDURE SP_EXTB_COMPRA (
>
> NR_DOC VARCHAR(10),
>
> COD_FORN VARCHAR(5))
>
> AS
>
> BEGIN
>
> EXIT;
>
> END^
>
> CREATE PROCEDURE SP_EXTB_LOTE (
>
> COD_EMP INTEGER,
>
> COD_LOTE VARCHAR(6))
>
> AS
>
> BEGIN
>
> EXIT;
>
> END^
>
> CREATE PROCEDURE SP_EXTB_VENDA (
>
> COD_EMP INTEGER,
>
> COD_PED INTEGER)
>
> AS
>
> BEGIN
>
> EXIT;
>
> END^
>
> CREATE PROCEDURE SP_MOVB_COMPRA (
>
> NR_DOC VARCHAR(10),
>
> COD_FORN VARCHAR(5))
>
> AS
>
> BEGIN
>
> EXIT;
>
> END^
>
> CREATE PROCEDURE SP_MOVB_LOTE (
>
> COD_EMP INTEGER,
>
> COD_LOTE VARCHAR(6))
>
> AS
>
> BEGIN
>
> EXIT;
>
> END^
>
> CREATE PROCEDURE SP_MOVB_VENDA (
>
> COD_EMP INTEGER,
>
> COD_PED INTEGER)
>
> AS
>
> BEGIN
>
> EXIT;
>
> END^
>
> SET TERM ; ^
>
> /***************************************************************************
> ***/
>
> /**** Tables
> ****/
>
> /***************************************************************************
> ***/
>
> CREATE TABLE MOV_B (
>
> COD_MPROD INTEGER NOT NULL,
>
> COD_PROD VARCHAR(5) NOT NULL,
>
> TELA CHAR(1) NOT NULL,
>
> DATA_MOVI TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
>
> QTD_MOV NUMERIC(12,3) DEFAULT 0 NOT NULL,
>
> COD_EMP INTEGER NOT NULL,
>
> COD_PED INTEGER,
>
> COD_FORN VARCHAR(5),
>
> NR_DOC VARCHAR(10),
>
> NR_PRO VARCHAR(6),
>
> COD_DEV VARCHAR(5),
>
> TIPO_SAI CHAR(1),
>
> COD_LOTE VARCHAR(6)
>
> );
>
> /***************************************************************************
> ***/
>
> /**** Triggers for tables
> ****/
>
> /***************************************************************************
> ***/
>
> /* Trigger: TG_ADD_ESTOQUE */
>
> CREATE TRIGGER TG_ADD_ESTOQUE FOR MOV_B
>
> ACTIVE BEFORE INSERT POSITION 0
>
> AS
>
> declare variable VQTDE NUMERIC(12,3);
>
> begin
>
> /* Adiciona Movimento ao estoque */
>
> IF(NEW.TIPO_SAI = 'S') THEN
>
> VQTDE = -NEW.QTD_MOV;
>
> ELSE IF(NEW.TIPO_SAI = 'E') THEN
>
> VQTDE = +NEW.QTD_MOV;
>
> IF ((NEW.TIPO_SAI = 'S') OR (NEW.TIPO_SAI = 'E')) THEN
>
> UPDATE EST_PROD SET
>
> QTD_ATU_B = QTD_ATU_B + :VQTDE
>
> WHERE COD_PROD = NEW.COD_PROD;
>
> end
>
> ^
>
> /* Trigger: TG_REM_ESTOQUE */
>
> CREATE TRIGGER TG_REM_ESTOQUE FOR MOV_B
>
> ACTIVE AFTER DELETE POSITION 0
>
> AS
>
> declare variable VQTDE NUMERIC(12,3);
>
> begin
>
> /* Adiciona Movimento ao estoque */
>
> IF(OLD.TIPO_SAI = 'S') THEN
>
> VQTDE = +OLD.QTD_MOV;
>
> ELSE IF(OLD.TIPO_SAI = 'E') THEN
>
> VQTDE = -OLD.QTD_MOV;
>
> IF ((OLD.TIPO_SAI = 'S') OR (OLD.TIPO_SAI = 'E')) THEN
>
> UPDATE EST_PROD SET
>
> QTD_ATU_B = QTD_ATU_B + :VQTDE
>
> WHERE COD_PROD = OLD.COD_PROD;
>
> end
>
> ^
>
> SET TERM ; ^
>
> /***************************************************************************
> ***/
>
> /**** Stored Procedures
> ****/
>
> /***************************************************************************
> ***/
>
> SET TERM ^ ;
>
> ALTER PROCEDURE SP_EXTB_COMPRA (
>
> NR_DOC VARCHAR(10),
>
> COD_FORN VARCHAR(5))
>
> AS
>
> BEGIN
>
> /* Deleta Movimento de Venda */
>
> DELETE FROM MOV_B
>
> WHERE NR_DOC = :NR_DOC AND COD_FORN = :COD_FORN AND TELA = 'C';
>
> END
>
> ^
>
> ALTER PROCEDURE SP_EXTB_LOTE (
>
> COD_EMP INTEGER,
>
> COD_LOTE VARCHAR(6))
>
> AS
>
> BEGIN
>
> /* Deleta Movimento de Lote */
>
> DELETE FROM MOV_B
>
> WHERE COD_EMP = :COD_EMP AND COD_LOTE = :COD_LOTE AND TELA = 'L';
>
> END
>
> ^
>
> ALTER PROCEDURE SP_EXTB_VENDA (
>
> COD_EMP INTEGER,
>
> COD_PED INTEGER)
>
> AS
>
> BEGIN
>
> /* Deleta Movimento de Venda */
>
> DELETE FROM MOV_B
>
> WHERE COD_EMP = :COD_EMP AND COD_PED = :COD_PED AND TELA = 'V';
>
> END
>
> ^
>
> ALTER PROCEDURE SP_MOVB_COMPRA (
>
> NR_DOC VARCHAR(10),
>
> COD_FORN VARCHAR(5))
>
> AS
>
> BEGIN
>
> /* Deleta Movimento de Venda */
>
> DELETE FROM MOV_B
>
> WHERE NR_DOC = :NR_DOC AND COD_FORN = :COD_FORN AND TELA = 'C';
>
> /* Inclui Movimento de Venda */
>
> INSERT INTO MOV_B
>
> (COD_MPROD, COD_PROD, TELA, DATA_MOVI, QTD_MOV, COD_EMP, NR_DOC, COD_FORN,
> TIPO_SAI)
>
> SELECT GEN_ID (GEN_MOV_B, 1), ITN.COD_PROD, 'C', CURRENT_TIMESTAMP,
> ITN.QTD_02, CAB.COD_EMP, ITN.NR_DOC, ITN.COD_FORN, IIF(CFO.TIPO_E_S = '1',
> 'E', iif(CFO.TIPO_E_S = '2', 'S', 'N'))
>
> FROM ENT_ITN ITN
>
> LEFT OUTER JOIN ENT_CAB CAB ON (CAB.NR_DOC = ITN.NR_DOC AND
> CAB.COD_FORN = ITN.COD_FORN)
>
> LEFT OUTER JOIN CFOP CFO ON (CFO.CFOP = CAB.CFOP)
>
> WHERE ITN.NR_DOC = :NR_DOC AND ITN.COD_FORN = :COD_FORN;
>
> END
>
> ^
>
> ALTER PROCEDURE SP_MOVB_LOTE (
>
> COD_EMP INTEGER,
>
> COD_LOTE VARCHAR(6))
>
> AS
>
> BEGIN
>
> /* Deleta Movimento de Lote */
>
> DELETE FROM MOV_B
>
> WHERE COD_EMP = :COD_EMP AND COD_LOTE = :COD_LOTE AND TELA = 'L';
>
> /* Inclui Movimento de Lote */
>
> INSERT INTO MOV_B
>
> (COD_MPROD, COD_PROD, TELA, DATA_MOVI, QTD_MOV, COD_EMP, COD_LOTE,
> TIPO_SAI)
>
> SELECT GEN_ID (GEN_MOV_B, 1), ITN.COD_PROD, 'L', CURRENT_TIMESTAMP, 
> ITN.QTD,
> ITN.COD_EMP, ITN.COD_LOTE, CAB.TIPO
>
> FROM LOTE_ITN ITN
>
> LEFT OUTER JOIN LOTE_CAB CAB ON (CAB.COD_EMP = ITN.COD_EMP AND
> CAB.COD_LOTE = ITN.COD_LOTE)
>
> WHERE ITN.COD_EMP = :COD_EMP AND ITN.COD_LOTE = :COD_LOTE;
>
> END
>
> ^
>
> ALTER PROCEDURE SP_MOVB_VENDA (
>
> COD_EMP INTEGER,
>
> COD_PED INTEGER)
>
> AS
>
> BEGIN
>
> /* Deleta Movimento de Venda */
>
> DELETE FROM MOV_B
>
> WHERE COD_EMP = :COD_EMP AND COD_PED = :COD_PED AND TELA = 'V';
>
> /* Inclui Movimento de Venda */
>
> INSERT INTO MOV_B
>
> (COD_MPROD, COD_PROD, TELA, DATA_MOVI, QTD_MOV, COD_EMP, COD_PED,
> TIPO_SAI)
>
> SELECT GEN_ID (GEN_MOV_B, 1), ITN.COD_PROD, 'V', CURRENT_TIMESTAMP,
> ITN.QTD_01, ITN.COD_EMP, ITN.COD_PED, IIF(CFO.TIPO_E_S = '1', 'E',
> iif(CFO.TIPO_E_S = '2', 'S', 'N'))
>
> FROM SAI_ITN ITN
>
> LEFT OUTER JOIN SAI_CAB CAB ON (CAB.COD_EMP = ITN.COD_EMP AND
> CAB.COD_PED = ITN.COD_PED)
>
> LEFT OUTER JOIN CFOP CFO ON (CFO.CFOP = CAB.CFOP)
>
> WHERE ITN.COD_EMP = :COD_EMP AND ITN.COD_PED = :COD_PED;
>
> END
>
> ^
>
> SET TERM ; ^

Responder a