Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在oracle SQL中创建名为lastnamefirst的用户定义函数_Sql_Oracle - Fatal编程技术网

在oracle SQL中创建名为lastnamefirst的用户定义函数

在oracle SQL中创建名为lastnamefirst的用户定义函数,sql,oracle,Sql,Oracle,我正在使用oracle SQL Developer 我试图创建一个函数,该函数将接受两个参数(名字和姓氏),并将它们作为一个变量返回,姓氏将首先显示。这是我的功能 CREATE OR REPLACE FUNCTION LASTNAMEFIRST ( varFirstName IN VARCHAR2, varLastName IN VARCHAR2 ) RETURN VARCHAR2 AS BEGIN DECLARE varFullName VARCHAR2; DEFINE varFullN

我正在使用oracle SQL Developer

我试图创建一个函数,该函数将接受两个参数(名字和姓氏),并将它们作为一个变量返回,姓氏将首先显示。这是我的功能

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”的分号上收到一个错误“语法错误”
我一直试图改变一些小事情,而每当我改变事情时,同样的错误就会出现在不同的地方。我做错了什么?

语法错误。应该是

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
    关键字,数据类型需要长度(例如
    VARCHAR2(30)
  • CONCAT
    只接受两个参数;使用连接运算符,改为双管道
    |
  • PL/SQL中没有定义
    DEFINE

我希望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; 

这当然可以简化(比如不使用局部变量),但它遵循代码的逻辑。

使用
声明实际上是在启动一个新的代码块,这会导致您看到的错误。在代码中,如果在
开始
之前移动变量声明,则不需要
声明
<代码>定义
也无效。像这样的方法应该会奏效:

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;