EBS FORM pl/sql 验证邮箱格式(oracle 10g & oracle 6i)
方法一:利用正则表达式(oracle 10g)
Oracle 10g支持正则表达式的四个新函数分别是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和REGEXP_REPLACE。
select sysdate into p_sysdate from dual
where regexp_like(p_email,'\w+@\w+(\.\w+)+');
方法二:原始方法(oracle 6i)
因为用的环境是oracle 6i,所以不支持正则表达式验证。
在邮箱字段加触发器:WHEN-VALIDATE-ITEM
if :email_lines.email is null
then return;
elsif check_email(:email_lines.email) then
null;
else
message('请输入正确的邮箱');
raise form_trigger_failure; --抛出form级trigger
end if;
调用的函数如下:
FUNCTION
check_email(p_email in varchar2)
RETURN boolean IS
v_length number;
v_length_at number;
v_suffix varchar2(30);
v_length_dot number;
BEGIN
v_length :=length(p_email);
v_length_at:=instr(p_email,'@');
--取出email的后缀
if v_length=v_length_at or v_length_at <2 then
return false;
else v_suffix:=substr(p_email,v_length_at+1,v_length);
end if;
v_length_dot:=instr(v_suffix,'.');
--判断后缀中是否有’. ’
if v_length_dot<2 or v_length_dot=(v_length-v_length_at) or instr(v_suffix,'@')<>0 then
return false;
--判断后缀中是否有连续的'..'
v_suffix:=substr(v_suffix,v_length_dot+1,length(v_suffix));
if instr(v_suffix,'.')=1 then
return false;
end if;
end if;
return TRUE;
END;