无法解决PL / SQL函数中的错误

时间:2013-05-07 09:24:12

标签: sql oracle plsql oracle11g

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

Ex:致电:

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

2 个答案:

答案 0 :(得分:3)

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

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

最大PL / SQL中varchar2的大小为32k,因此对于您的用例应该足够了。如果您需要限制它,请在您的函数体中执行此操作。

答案 1 :(得分: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;​
/