在 PLSQL 中检查电子邮件的域
Posted
技术标签:
【中文标题】在 PLSQL 中检查电子邮件的域【英文标题】:checking domain of email in PLSQL 【发布时间】:2017-04-24 15:11:42 【问题描述】:我正在尝试在允许用户注册之前检查电子邮件的域部分。
`#OWNER#.REGISTER_CUSTOMER(
IN_USERNAME => :P102__USERNAME,
IN_PASSWORD => :P102__PASSWORD,
IN_FORENAME => :P102__FORENAME,
IF IN_EMAIL LIKE '@% study.beds.ac.uk' THEN
IN_EMAIL => :P102__EMAIL,
END IF;
IN_TEL => :P102__TEL,
IN_SURNAME => :P102__SURNAME);`
不幸的是,它似乎没有工作,并给了我这个错误代码。
ora_sqlerrm:ORA-06550:第 5 行,第 1 列:PLS-00103:在预期以下情况之一时遇到符号“IF”:( - + case mod new not null continue avg count current exists max min prior sql stddev总和方差执行forall合并时间时间戳间隔日期管道
非常感谢您的帮助。
【问题讨论】:
期望域在这里有一个空格似乎很奇怪:'@% study.beds.ac.uk'
【参考方案1】:
我不知道您要应用什么测试,但看起来您需要case
声明。这将是:
register_customer(
in_username => :p102__username,
in_password => :p102__password,
in_forename => :p102__forename,
in_email => case
when whatever then :p102__email
else somethingelse
end,
in_tel => :p102__tel,
in_surname => :p102__surname
);
请注意,左侧的标签指的是您将右侧的值传递给的参数的名称,因此例如针对in_email
执行逻辑测试是没有意义的。也许您想根据:p102__email
的值做一些事情?
【讨论】:
【参考方案2】:您需要使用case
而不是if
#OWNER#.REGISTER_CUSTOMER(
IN_USERNAME => :P102__USERNAME,
IN_PASSWORD => :P102__PASSWORD,
IN_FORENAME => :P102__FORENAME,
IN_EMAIL => CASE
WHEN IN_EMAIL LIKE '@% study.beds.ac.uk' THEN
:P102__EMAIL
end,
IN_TEL => :P102__TEL,
IN_SURNAME => :P102__SURNAME
);
下面的示例将打印bye
。因为第一个条件会失败。
begin
dbms_output.put_line(a=> case
when 1=2 then
'hello'
else
'bye'
end);
end;
【讨论】:
【参考方案3】:好吧,既然您标记了 oracle-apex 并且您使用了页面项等。为什么您跳过电子邮件验证的使用并为用户提供一些有意义的反馈?另一种解决方案是什么?抛出 ora 错误?把它删掉?
在P102__EMAIL
上创建验证,您可以在其中检查域,如果不匹配,则显示一条很好的消息,例如“您的电子邮件的域不正确”。否则用户将无法继续,无论他尝试提交多少次。
【讨论】:
以上是关于在 PLSQL 中检查电子邮件的域的主要内容,如果未能解决你的问题,请参考以下文章
如何从电子邮件地址 ArrayList 中删除重复的域电子邮件地址