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(3),
    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)
    RETURNING ID INTO :ID;

  SUSPEND;

END;