Oracle PL / SQL - Aumente la excepción definida por el usuario con SQLERRM personalizado

Es posible crear excepciones definidas por el usuario y poder cambiar el SQLERRM?

Por ejemplo

DECLARE
    ex_custom       EXCEPTION;
BEGIN
    RAISE ex_custom;
EXCEPTION
    WHEN ex_custom THEN
        DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
/

La salida es "Excepción definida por el usuario". ¿Es posible cambiar ese mensaje?

EDIT: Aquí hay más detalles.

Espero que este ilustra lo que estoy tratando de hacer mejor.

DECLARE
    l_table_status      VARCHAR2(8);
    l_index_status      VARCHAR2(8);
    l_table_name        VARCHAR2(30) := 'TEST';
    l_index_name        VARCHAR2(30) := 'IDX_TEST';
    ex_no_metadata      EXCEPTION;
BEGIN

    BEGIN
        SELECT  STATUS
        INTO    l_table_status
        FROM    USER_TABLES
        WHERE   TABLE_NAME      = l_table_name;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            -- raise exception here with message saying
            -- "Table metadata does not exist."
            RAISE ex_no_metadata;
    END;

    BEGIN
        SELECT  STATUS
        INTO    l_index_status
        FROM    USER_INDEXES
        WHERE   INDEX_NAME      = l_index_name;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            -- raise exception here with message saying
            -- "Index metadata does not exist."
            RAISE ex_no_metadata;
    END;

EXCEPTION
    WHEN ex_no_metadata THEN
        DBMS_OUTPUT.PUT_LINE('Exception will be handled by handle_no_metadata_exception(SQLERRM) procedure here.');
        DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
/

En realidad, hay docenas de esos subbloques. Me pregunto si hay una manera de tener una única excepción definida por el usuario para cada uno de esos subbloques que se generarán, pero si tiene un mensaje diferente, en lugar de crear una excepción definida por el usuario por separado para cada subbloque.

En .NET, sería como tener una excepción personalizada como esta:

    public class ColorException : Exception
    {
        public ColorException(string message)
            : base(message)
        {
        }
    }

Y luego, un método tendría algo como esto:

        if (isRed)
        {
            throw new ColorException("Red is not allowed!");
        }

        if (isBlack)
        {
            throw new ColorException("Black is not allowed!");
        }

        if (isBlue)
        {
            throw new ColorException("Blue is not allowed!");
        }

Respuestas a la pregunta(5)

Su respuesta a la pregunta