Создание пользовательской функции в Oracle SQL с именем lastnamefirst - PullRequest
0 голосов
/ 13 ноября 2018

Я использую Oracle-разработчик Oracle.

Я пытаюсь создать функцию, которая будет принимать два параметра (имя и фамилию) и возвращать их как одну переменную, при этом фамилия будет отображаться первой.Вот моя функция.

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»изменить вещи.Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

Я ожидаю, что синтаксис 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; 

Это, конечно, можно упростить (скажем, не используя локальную переменную), но оно следует логике вашего кода.

0 голосов
/ 13 ноября 2018

Использование 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;
0 голосов
/ 13 ноября 2018

Неправильный синтаксис.Должно быть

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 принимает только два аргумента;используйте оператор конкатенации, двойная труба || вместо
  • в PL / SQL
нет DEFINE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...