SET TERM ^ ;

CREATE OR ALTER trigger ttbproduto_b01iu for tbproduto
active before insert or update position 0
AS
DECLARE VARIABLE PRODUTO_COR VARCHAR(500);
DECLARE VARIABLE GRUPO_PRODUTO VARCHAR(500);
BEGIN

    :PRODUTO_COR   = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.DESCRICAO||' / '||FN_LPAD(A.COR_CODIGO, 6, '0')||' - '||COALESCE(B.DESCRICAO, 'SEM COR') FROM TBPRODUTO A LEFT JOIN TBCOR B ON B.CODIGO = A.COR_CODIGO WHERE A.GRUPO_PRODUTO_ID > 0 AND A.GRUPO_PRODUTO_ID = NEW.GRUPO_PRODUTO_ID AND A.COR_CODIGO = NEW.COR_CODIGO), '');
    :GRUPO_PRODUTO = COALESCE((SELECT FIRST 1 FN_LPAD(C.ID, 6, '0')||' - '||C.DESCRICAO FROM TBGRUPO_PRODUTO C WHERE C.ID = NEW.GRUPO_PRODUTO_ID), '');

    IF (INSERTING) THEN
    BEGIN

        IF (:PRODUTO_COR <> '') THEN
        BEGIN
            EXCEPTION "..." 'GRUPO DE PRODUTO '||:GRUPO_PRODUTO||' JA CONTEM UM PRODUTO COM A COR SELECIONADA. <br>PRODUTO/COR: '||PRODUTO_COR;
        END

    END

    IF (UPDATING) THEN
    BEGIN

        IF ((OLD.GRUPO_PRODUTO_ID <> NEW.GRUPO_PRODUTO_ID) OR (OLD.COR_CODIGO <> NEW.COR_CODIGO)) THEN
        BEGIN

            IF (:PRODUTO_COR <> '') THEN
            BEGIN
                EXCEPTION "..." 'GRUPO DE PRODUTO '||:GRUPO_PRODUTO||' JA CONTEM UM PRODUTO COM A COR SELECIONADA. <BR>PRODUTO/COR: '||PRODUTO_COR;
            END    

        END
    END

END
^

SET TERM ; ^

