我正在编写一个名为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.
以下是错误链接:
答案 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;
/