创建Oracle SQL Java函数不起作用
尝试创建oracle SQL java函数以生成所述的随机UUID时,出现以下错误:创建Oracle SQL Java函数不起作用,oracle,java-stored-procedures,Oracle,Java Stored Procedures,尝试创建oracle SQL java函数以生成所述的随机UUID时,出现以下错误: 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 comple
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';
加上“;”在字符串无效后:
create or replace function random_uuid return varchar2 as
language java
name 'java.util.UUID.randomUUID() return String;';
由于问题似乎是IDE无法识别语句终止的位置,因此您可以尝试将其包装在PL/SQL匿名块中,并使用
executeimmediate
强制其正确解析语句:
BEGIN
EXECUTE IMMEDIATE 'CREATE OR REPLACE FUNCTION RandomUUID RETURN VARCHAR2 AS LANGUAGE JAVA NAME ''java.util.UUID.randomUUID() return java.lang.String'';';
END;
/
那么为什么不添加请求的“;”?可以共享java代码吗?除了脚本中的“java.util.UUID.randomuid()”之外,没有其他java代码。我只是想在IntelliJ IDEA的数据库控制台中执行脚本。这似乎是由解析引起的:数据库控制台将末尾的分号视为语句分隔符,因此语句中缺少分号。dbvis也有同样的问题,但可以在块上标记“-/”和“-”。检查类是否有效
SELECT*FROM dba_对象,其中object_输入('JAVA class'),object_名称='JAVA/util/UUID'代码>IntelliJ IDEA错误报告:“java.util.UUID.randomUUID()返回字符串”在使用dbvis和SQL块分隔符创建函数时工作正常: