我正在使用oracle SQL开发人员。
我正在尝试创建一个函数,该函数将接受两个参数(名字和姓氏)并将它们作为一个变量返回,并且姓氏将首先显示。这是我的功能。
CREATE OR REPLACE FUNCTION LASTNAMEFIRST
(
varFirstName IN VARCHAR2,
varLastName IN VARCHAR2
)
RETURN VARCHAR2 AS
BEGIN
DECLARE varFullName VARCHAR2;
DEFINE varFullName := CONCAT(varLastName,' ' ,varFirstName);
RETURN varFullName;
END LASTNAMEFIRST;
我在'end lastnamefirst'的分号处收到错误,“语法错误” 我一直在尝试改变小事情,每当我改变事物时,相同的错误就会出现在不同的地方。我在做什么错了?
答案 0 :(得分:0)
语法错误。应该是
SQL> create or replace function lastnamefirst
2 (varfirstname in varchar2,
3 varlastname in varchar2)
4 return varchar2
5 as
6 begin
7 return varlastname||' '||varfirstname;
8 end;
9 /
Function created.
SQL> select lastnamefirst('Little', 'Foot') result from dual;
RESULT
------------------------------
Foot Little
SQL>
您的代码有什么问题?
DECLARE
;如果您这样做,根本就没有DECLARE
关键字,并且数据类型需要长度(例如VARCHAR2(30)
)CONCAT
仅接受两个参数;使用串联运算符,改为使用双管道||
DEFINE
答案 1 :(得分:0)
我希望Oracle语法看起来更像:
CREATE OR REPLACE FUNCTION LASTNAMEFIRST (
in_FirstName IN VARCHAR2,
in_LastName IN VARCHAR2
)
RETURN VARCHAR2 AS
v_FullName varchar2(4000);
BEGIN
v_FullName := in_LastName || ' ' || in_FirstName;
RETURN v_FullName;
END; -- LASTNAMEFIRST;
这当然可以简化(例如,不使用局部变量),但是它遵循代码的逻辑。
答案 2 :(得分:0)
使用您所在的DECLARE
本质上是开始一个新的代码块,这会导致您看到错误。在代码中,如果将变量声明移到DECLARE
之前,则BEGIN
是不必要的。 DEFINE
也无效。这样的事情应该起作用:
CREATE OR REPLACE FUNCTION LASTNAMEFIRST
(
varFirstName IN VARCHAR2,
varLastName IN VARCHAR2
)
RETURN VARCHAR2 AS
varFullName VARCHAR2(100);
BEGIN
varFullName := varLastName || ' ' || varFirstName;
RETURN varFullName;
END LASTNAMEFIRST;
可以通过完全删除变量声明来进一步简化:
CREATE OR REPLACE FUNCTION LASTNAMEFIRST
(
varFirstName IN VARCHAR2,
varLastName IN VARCHAR2
)
RETURN VARCHAR2 AS
BEGIN
RETURN varLastName || ' ' || varFirstName;
END LASTNAMEFIRST;