PLS-00103: Encountered the symbol
исключение всегда указывает на синтаксическую ошибку. Так что это легко решить, посмотрев на код над данным номером строки - в данном случае 42 - и сравнив его с синтаксисом, приведенным в документации Oracle PL / SQL .
Проблема в вашем случае в том, что ваш код может быть действительным, но это не так. Вы написали
IF ...
ELSE IF
Теперь это правильный синтаксис, когда второй IF вложен:
IF ...
ELSE IF ... END IF;
END IF;
В этом сценарии каждый автономный IF соответствует END IF. Но вы на самом деле пытаетесь реализовать переключатель. Таким образом, у вас есть только один конец, если. В этом случае вы должны использовать вместо ELSIF:
IF ...
ELSIF ...
END IF;
В блоке ИСКЛЮЧЕНИЕ есть еще одна синтаксическая ошибка. DBMS_OUTPUT.PUT_LINE () принимает один параметр - строку. Чтобы вернуть сообщение с определенным пользователем номером, используйте функцию RAISE_APPLICATION_ERROR ().
Ветвь ДРУГИЕ - просто плохая практика. Буквально тысячи сообщений об ошибках Oracle, многие из которых могут сбить вашу процедуру. Сжатие всех этих данных в одно общее сообщение бесполезно для любого, кто пытается диагностировать причину сбоя программы. Изначально это будете вы, поэтому помогайте себе, а также людям, которые будут поддерживать вас после вас. Также лучше вызывать исключения, а не использовать DBMS_OUTPUT: сообщения могут игнорироваться или оставаться незамеченными, исключения должны обрабатываться.
EXCEPTION
WHEN NO_DATA_FOUND THEN
raise_application_error(-20032,'El socio no existe');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Ha ocurrido un error');
raise;
END P_CONSULTAR_SOCIOS;