ALTER TABLE TBFICHA_CUSTO_MP
    ADD MODELO_ID INTEGER DEFAULT 0;


CREATE OR ALTER procedure SPUI_PRODUTO_EDI (
    EMPRESA_CODIGO integer,
    PRODUTO_CODIGO integer,
    CODIGO varchar(20),
    CODIGO_XML varchar(100),
    CODIGO_VSK varchar(20),
    DESCRICAO varchar(100),
    UNIDADEMEDIDA_SIGLA varchar(10),
    CUSTO_UNITARIO numeric(15,4),
    COR_DESCRICAO varchar(20),
    ALTERANFE char(1),
    PRIORIDADE integer,
    MULTIPLO integer,
    OBSERVACAO varchar(100) = null)
returns (
    ID integer)
as
BEGIN

    UPDATE OR INSERT INTO TBPRODUTO_EDI (EMPRESA_CODIGO, PRODUTO_CODIGO, CODIGO, CODIGO_XML, DESCRICAO,
            UNIDADEMEDIDA_SIGLA, ALTERANFE, CUSTO_UNITARIO, CODIGO_VSK, COR_DESCRICAO,
            PRIORIDADE, MULTIPLO, OBSERVACAO)
    VALUES (:EMPRESA_CODIGO, :PRODUTO_CODIGO, :CODIGO, :CODIGO_XML, :DESCRICAO, :UNIDADEMEDIDA_SIGLA, :ALTERANFE,
    :CUSTO_UNITARIO, :CODIGO_VSK, :COR_DESCRICAO, :PRIORIDADE, :MULTIPLO, :OBSERVACAO)
    MATCHING (PRODUTO_CODIGO, EMPRESA_CODIGO, CODIGO_XML)
    RETURNING ID INTO :ID;

  SUSPEND;

END;

CREATE OR ALTER trigger ttbproduto_edi_b02i for tbproduto_edi
active before insert position 0
AS
DECLARE VARIABLE ID INTEGER;
BEGIN
    ID = COALESCE((SELECT FIRST 1
                        A.EMPRESA_CODIGO
                    FROM TBPRODUTO_EDI A
                WHERE   A.EMPRESA_CODIGO = NEW.EMPRESA_CODIGO
                AND     A.PRODUTO_CODIGO = NEW.PRODUTO_CODIGO
                AND     A.CODIGO_XML = NEW.CODIGO_XML), 0);

    IF(ID > 0) THEN
    BEGIN
        EXCEPTION "..." 'REGISTRO JA VINCULADO P/ EMPRESA SELECIONADA NESTE PRODUTO, OPERAÇÃO CANCELADA!';
    END
END;


ALTER TABLE TBPRODUTO_EDI DROP CONSTRAINT INTEG_1547;


ALTER TABLE TBPRODUTO_EDI ALTER ID SET NOT NULL;

ALTER TABLE TBPRODUTO_EDI
ADD CONSTRAINT PK_TBPRODUTO_EDI
PRIMARY KEY (ID);