我想在允许用户注册之前检查电子邮件的域名部分。
`#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
非常感谢你的帮助。
答案 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
上创建一个验证域,如果它不匹配,则会显示一条好消息,例如“您的电子邮件的域名不正确”。无论用户尝试提交多少次,用户都无法继续进行。