Я вам рекомендую переделать этот код.
В наличие пренебрежение некоторыми нормами разработки.
1.
id in number
СУБД дает вам возможность создавать имена переменных длинной до 32 символов. Так пользуйтесь этим. Придумайте нормальное имя, например, id_certificate.
2.
currentSequence NUMBER(10,0);
BEGIN
currentSequence := 0;
Я верю, что вам платят не за строчки кода. Такое надо объединять в
currentSequence NUMBER(10,0) := 0 ;
3. Поле с именем ID это зло. Когда сущностей в системе станет к 100. Вы будете путаться в этих ID как ребенок в буквах.
4.
currentSequence := 0;
SELECT
max(vr.CERTIFICATE) INTO currentSequence
FROM
VAGON_REGISTR vr
WHERE
vr.ID = id;
На этот код должен был ругнуться WARNING'ом компилятор. Типа, значение присваивается, но не используется и снова присваивается в команде выбора.
5. Команда выхода из блока return должна быть одна. Для ветвления алгоритмов есть If & Case etc.
6. Про commit (или rollback) уже писали выше.
7. И да, Oracle не знает camelcase'а GetCertificateSeq. Лучше делать так Get_Certificate_Seq