检查PLSQL中的电子邮件域

时间:2017-04-24 15:11:42

标签: oracle plsql oracle-apex

我想在允许用户注册之前检查电子邮件的域名部分。

`#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 last max before sql stddev sum variance执行forall merge time timestamp interval date pipe

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:1)

您需要使用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;

答案 1 :(得分: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 :(得分:0)

好吧,既然您标记了oracle-apex并且您使用了page-items等。为什么要跳过使用电子邮件验证并向用户提供一些有意义的反馈?另一种解决方案是什么?抛出ora-error?搞砸了吗? 在P102__EMAIL上创建一个验证域,如果它不匹配,则会显示一条好消息,例如“您的电子邮件的域名不正确”。无论用户尝试提交多少次,用户都无法继续进行。