【发布时间】:2018-11-19 20:46:50
【问题描述】:
各位程序员们好,
我有一个关于异常处理的问题。 我创建了一个函数,用于将值插入到包含电子邮件和用户名列的表中,电子邮件的最大字符长度为 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;
【问题讨论】:
-
您可能对Security.SE quoestion Should I have a maximum password length? 感兴趣
-
@KaushikNayak 我已将代码编辑到我的帖子中。我现在的问题是,它给出了一个错误,但我不能在两个不同的错误之间“选择”。我正在尝试获取一个用于太长的密码插入和一个用于太长的电子邮件插入。我想为每个错误创建一个不同的消息。
标签: postgresql exception exception-handling