Создание Java-функции Oracle SQL не работает - PullRequest
0 голосов
/ 29 января 2019

При попытке создать Java-функцию Oracle для генерации случайного UUID, как описано в этом ответе StackOverflow , я получаю следующую ошибку:

sql> CREATE or REPLACE FUNCTION random_uuid
   RETURN VARCHAR2
   AS LANGUAGE JAVA NAME 'java.util.UUID.randomUUID() return java.lang.String'
[2019-01-29 09:28:29] [99999][17110] Warning: execution completed with warning
[2019-01-29 09:28:29] completed in 23 ms
[2019-01-29 09:28:29] 3:78:PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
[2019-01-29 09:28:29] ;
[2019-01-29 09:28:29] The symbol ";" was substituted for "end-of-file" to continue.

Даже это просто предупреждение, вызывающеевпоследствии он не работает:

sql> select random_uuid() from dual
[2019-01-29 09:36:28] [65000][6575] ORA-06575: Package or function RANDOM_UUID is in an invalid state

Я использую консоль базы данных IntelliJ IDEA для выполнения сценария.Что не так?

РЕДАКТИРОВАТЬ: Мой оригинальный скрипт содержит точку с запятой в конце:

create or replace function random_uuid return varchar2 as
  language java
  name 'java.util.UUID.randomUUID() return String';

Добавление ';'после String не помогает:

create or replace function random_uuid return varchar2 as
  language java
  name 'java.util.UUID.randomUUID() return String;';

1 Ответ

0 голосов
/ 29 января 2019

Поскольку проблема заключается в том, что среда IDE не распознает, где заканчивается оператор, вы можете попытаться обернуть его в анонимный блок PL / SQL и использовать EXECUTE IMMEDIATE, чтобы заставить его правильно проанализировать оператор:

BEGIN
  EXECUTE IMMEDIATE 'CREATE OR REPLACE FUNCTION RandomUUID RETURN VARCHAR2 AS LANGUAGE JAVA NAME ''java.util.UUID.randomUUID() return java.lang.String'';';
END;
/
...