Мне кажется, здесь мало вопросов. Хорошим началом было бы прочитать AskTom о мутирующей ошибке (https://asktom.oracle.com/pls/apex/f?p=100:11:::NO::P11_QUESTION_ID:9536903800346619276). Полагаю, это даст вам довольно хорошую идею. Также есть много примеров.
Затем вы пытаетесь обновить ту же таблицу во время другого обновления, которое вызывает ошибку. Поскольку это та же таблица, вы можете просто сделать что-то вроде
:NEW.J_PROJECT_ORACLE_CODE := V_CODE;
Далее, этот SELECT может возвращать нулевой набор записей, который не обрабатывается (может быть, поле может быть обнуляемым?); или более одной записи? Исключение - не лучший подход, потому что оно сильно потребляет ресурсы. Вопрос в том, зачем вставлять что-то, если отсутствуют данные? Может быть, MERGEing лучше? Зависит от многих факторов.
Другие ошибки, вероятно, являются результатом ошибки мутации.