【问题标题】:checking domain of email in PLSQL在 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'

标签: oracle plsql oracle-apex


【解决方案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 上创建验证,您可以在其中检查域,如果不匹配,则显示一条很好的消息,例如“您的电子邮件的域不正确”。否则用户将无法继续,无论他尝试提交多少次。

      【讨论】:

        猜你喜欢
        • 2022-06-16
        • 1970-01-01
        • 2018-09-30
        • 1970-01-01
        • 2016-10-05
        • 1970-01-01
        • 2018-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多