Здравствуйте, коллеги-программисты,
У меня есть вопрос, касающийся обработки исключений.Я создал функцию для вставки значений в таблицу со столбцами электронной почты и именем пользователя с максимальной длиной символов 16 для электронного письма и 32 для пароля.
Теперь я хочу выдать сообщение об ошибке вроде 'Пароль слишком длинный, максимум 16 символов, всякий раз, когда длина введенного электронного письма превышает 16 символов.
Я пробовал его уже с кодом ошибки «Name_too_long».
Как я могу сделать это с исключениями в Postgres 10.5?Заранее спасибо.
РЕДАКТИРОВАТЬ: полуфункциональный КОД
CREATE OR REPLACE FUNCTION users_insert(_email character varying,_passwort character varying) RETURNS void
AS $BODY$
BEGIN
INSERT INTO users(email,passwort,lastlogin)
VALUES(_email,_passwort,CURRENT_TIMESTAMP);
EXCEPTION
WHEN string_data_right_truncation
THEN RAISE NOTICE 'ERROR: INSERT TOO LONG';
END;
$BODY$
LANGUAGE plpgsql ;
РЕДАКТИРОВАТЬ: рабочий код, с 2 различными сообщениями об ошибках, для каждой ошибки:
CREATE OR REPLACE FUNCTION public.users_insert(
_email character varying,
_passwort character varying)
RETURNS void
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
BEGIN
IF LENGTH(_passwort) > 16
THEN RAISE EXCEPTION USING errcode = 50001;
END IF;
IF LENGTH(_email) > 32
THEN RAISE EXCEPTION USING errcode = 22001;
END IF;
INSERT INTO users(email,passwort,lastlogin)
VALUES(_email,_passwort,CURRENT_TIMESTAMP);
EXCEPTION
WHEN SQLSTATE '50001' THEN
RAISE NOTICE 'Password too long, 16 Chars max';
WHEN SQLSTATE '22001' THEN
RAISE NOTICE 'Email too long, 32 Chars max';
END;
$BODY$;
ALTER FUNCTION public.users_insert(character varying, character varying)
OWNER TO postgres;