在 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 中检查电子邮件的域的主要内容,如果未能解决你的问题,请参考以下文章

我在这个 PLSQL 函数中做错了啥?

如何在表单中验证电子邮件地址的域?

如何从电子邮件地址 ArrayList 中删除重复的域电子邮件地址

匹配MySQL中两个电子邮件地址的域和扩展名?

如何在不使用 Java 的情况下压缩 .csv 文件并在电子邮件中附加 Oracle plsql

使用 PLSQL 发送电子邮件