1

我正在编写一个名为 MAKE_EMAIL 的存储函数,它将接受名字和姓氏的输入参数,并将返回一个包含电子邮件地址的 varchar2 值,其形式为名字的第一个首字母,后跟完整的姓氏,后跟 @hpu.edu .

例如:调用:

select make_email('Edward','Souza')
from dual

...将返回单个值:

'esouza@hpu.edu'

请考虑以下函数代码:

代码:

create or replace function MAKE_EMAIL(lastname varchar2(10),firstname varchar2(10))
 return VARCHAR 
IS

  email VARCHAR2;

 BEGIN

 email := substr(lastname ,1,1)|| firstname || '@hpu.edu';
RETURN email;

END;
  /

运行上述功能后,我遇到了一些错误。请找出以下错误。请让我知道如何删除这些错误或上述代码有任何问题?

Warning: Function created with compilation errors.

SQL> show errors
Errors for FUNCTION MAKE_EMAIL:

LINE/COL ERROR
-----------------------------------------------------------------
1/38     PLS-00103: Encountered the symbol "(" when expecting one of the
     following:
     := . ) , @ % default character
     The symbol ":=" was substituted for "(" to continue.

1/61     PLS-00103: Encountered the symbol "(" when expecting one of the
     following:
     := . ) , @ % default character
     The symbol ":=" was substituted for "(" to continue.

这是错误的链接:

https://www.dropbox.com/s/gmjhbvie1c7dbcx/Error.png

4

2 回答 2

3

您不能varchar2为存储过程或函数指定参数的大小。只需删除函数声明中的两个大小规范,它应该可以编译(假设没有其他语法错误)。

另一方面,email变量确实需要大小约束。因此,在声明时指定一个。

最大。varchar2PL/SQL 中的大小为32k,因此对于您的用例来说应该绰绰有余。如果您需要限制它,请在您的函数体中进行。

于 2013-05-07T09:50:00.730 回答
0
create or replace function MAKE_EMAIL(lastname varchar2,firstname varchar2)
return VARCHAR2 
IS email VARCHAR2(28);
BEGIN
 email := substr(lastname ,1,1)|| firstname || '@hpu.edu';
RETURN email;
END;​
/
于 2013-09-08T00:47:36.487 回答