Что не так с этой функцией PL / SQL? - PullRequest
0 голосов
/ 11 июня 2019

У меня есть функция, объявленная следующим образом:

FUNCTION NewLogEntry(
  is_warning IN NUMBER, 
  log_msg IN VARCHAR2) RETURN log_entry
IS
  e log_entry;
BEGIN
  e.is_warning := is_warning;
  e.log_msg := log_msg;
  return(e);
END NewLogEntry;

TYPE log_array IS VARRAY(5000) OF log_entry;

Конечно, TYPE log_array не является частью функции, но она находится в строке, которая выдает ошибку компиляции:

PLS-00103: Encountered the symbol "TYPE" when expecting one of the following:     begin function pragma procedure 

Кстати, log_entry объявлен как:

TYPE log_entry IS RECORD 
(
  is_warning BOOLEAN,
  log_msg VARCHAR2(2000)
);

Что не так с моим синтаксисом функции?

1 Ответ

1 голос
/ 11 июня 2019

Если вы хотите, чтобы объявленный тип (как ЗАПИСЬ) мог видеть ваша функция, он понадобится вам в определении пакета, например,

create or replace
package MY_TYPES is

TYPE log_entry IS RECORD 
(
  is_warning BOOLEAN,
  log_msg VARCHAR2(2000)
);

end;

, а затем вы можете сделать

create or replace
FUNCTION NewLogEntry(
  is_warning IN NUMBER, 
  log_msg IN VARCHAR2) RETURN MY_TYPES.log_entry
IS
  e MY_TYPES.log_entry;
BEGIN
  e.is_warning := is_warning;
  e.log_msg := log_msg;
  return(e);
END NewLogEntry;

Есть и другие способы сделать это, но это должно заставить вас двигаться.Вот какой-то вывод

SQL> create or replace
  2  package MY_TYPES is
  3
  4  TYPE log_entry IS RECORD
  5  (
  6    is_warning BOOLEAN,
  7    log_msg VARCHAR2(2000)
  8  );
  9
 10  end;
 11  /

Package created.

SQL>
SQL> create or replace
  2  FUNCTION NewLogEntry(
  3    is_warning IN boolean,
  4    log_msg IN VARCHAR2) RETURN MY_TYPES.log_entry
  5  IS
  6    e MY_TYPES.log_entry;
  7  BEGIN
  8    e.is_warning := is_warning;
  9    e.log_msg := log_msg;
 10    return(e);
 11  END NewLogEntry;
 12  /

Function created.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...