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

时间:2016-11-27 14:56:01

标签: oracle function email plsql

我想检查作为输入提供的电子邮件地址是否有效。我创建了以下功能。该功能已成功创建,但是当我尝试运行该功能时,我无法获得所需的输出。

  CREATE OR REPLACE FUNCTION email_validate(p_email IN varchar2)
     return BOOLEAN
     is
     emailregexp constant varchar2(1000):= '^[a-z0-9._-]+@[a-z0-9.-]+\.[a-z]{1,10}$';

    BEGIN
     IF regexp_like(p_email,emailregexp ,'i') THEN
     RETURN true;
     ELSE
     RETURN false;
     END IF;
    END;

我试图检查输出的方式是:

DECLARE 

result BOOLEAN;

BEGIN 

result:= email_validate('abcd@gmail.com');
dbms_output.put_line(result);

END;

1 个答案:

答案 0 :(得分:3)

您不能将布尔值作为参数传递给dbms_output.put_line。当我运行您的代码时,我收到此错误:

  

ORA-06550:PLS-00306:调用'PUT_LINE'时参数的数量或类型错误

实用的解决方案是让您的函数返回smallint(0或1),这也可以用来执行您的电子邮件地址验证。

然后,您可以更轻松地测试代码,如下所示:

select email_validate('abcd@gmail.com') from dual;

如果您希望将结果显示为“false”或“true”:

select case when email_validate('abcd@gmail.com') > 0 
            then 'true' 
            else 'false' 
       end
from dual;

如果你留在PL / SQL中,你也可以使用boolean类型(跳过> 0然后)。但Oracle SQL无法处理它。