Задать вопрос
1na1
@1na1
Hello, world!

Как запретить передавать пустые агрументы в процедуру?

Как при создании pl/sql процедуры запретить передавать в аргументы значение NULL, сделать их строго (например) VARCHAR2? При этом явных проверок в стиле "IF arg IS NULL THEN ..." желательно избежать, потому что передается много аргументов и их отдельная проверка засоряет код. Существует что-то вроде модификатора аргумента, говорящего какие значения могут быть переданы?
Например, вот этот код исполняется без ошибок, а я хочу, чтобы NULL воспринимался как ошибочный аргумент.
DECLARE
 PROCEDURE null_args_testing(arg IN VARCHAR2) IS
  BEGIN 
   NULL;
  END;
BEGIN 
 null_args_testing('STRING'); -- При таком вызове процедура должна работать
 null_args_testing(NULL); -- при таком вызове должно происходить исключение
END;
  • Вопрос задан
  • 133 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
docs.oracle.com (Parameter Declaration):
You cannot constrain this data type (with NOT NULL, for example).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Первое значение в raise_application_error- должен быть из диапазона пользовательских ошибок:
PROCEDURE null_args_testing(arg IN VARCHAR2) IS
BEGIN
if arg is null then
raise_application_error(-20101, 'Значение не может быть NULL');
end if;

NULL;
END;
Еще можно вот так, если нужна более сложная логика:
PROCEDURE null_args_testing(arg IN VARCHAR2) IS
p_is_null exception;
BEGIN
if arg is null then
raise p_is_null;
end if;

exception
when p_is_null then
/*логика обработки*/
raise;/*процедура завершается*/
END;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы