从 PL/SQL 调用 java 时出错

Error while calling java from PL/SQL

当我从 PL/SQL 调用 JAVA class 时,出现以下错误

ORA-29532 Java call terminated by uncaught java exception

我已经提到了 metalink 注释 -Doc : 1420943.1

这要求检查值 (show parameters shared_servers),如果不为零则设置为零。 但该值已经是 0.

请帮我确定是什么导致了这个问题。

--------------------更多信息-------------------- --------------

我们使用 loadjava -user apps/password - force -verbose -resolve java.class 将 java class 加载到 Oracle 数据库中。

数据库版本 12c。

PL/SQL:

l_retCode := initialize(para_1 => l_para1,
                        Para_2 => l_para2,
                        para_3 => l_para3);

初始化函数定义如下

function initialize(para_1 VARCHAR2, para_2 VARCHAR2, para_3 VARCHAR2)
return NUMBER as LANGUAGE JAVA NAME
'com.snlp.XXWClass.initialize(java.lang.string,java.lang.string,java.lang.string) return int'

Java代码:

public static int initialize(s String, s1 String , s2 String){
  // logic goes here
}

1) 在数据库中 set serveroutput onexec dbms_java.set_output(10000000);它允许在数据库中查看 java 堆栈跟踪。

2) 发布java class 错误。字符大小很重要。改变java.lang.string。至 java.lang.String.

获得了 FIX

http://www.oracle.com/technetwork/database/enterprise-edition/calling-shell-commands-from-plsql-1-1-129519.pdf

我们需要在登录为 APPS 后给予 GRANTS(请参阅 link 以获得更清晰的信息 - 无法复制粘贴这些命令,所以我输入 - 以下命令中可能有一些拼写错误)以下命令修复了我们从 Oracle

调用 JAVA 中的许多问题

dbms_java.grant_permission( '<user_name>', 'SYS:java.util.PropertyPermission', '<property_name>', 'write' );

dbms_java.grant_permission( '<user_name>', 'SYS:java.util.RuntimePermission', 'writeFileDescriptor', '' );

dbms_java.grant_permission( '<user_name>', 'SYS:java.util.RuntimePermission', 'readFileDescriptor', '' );

exec DBMS_JAVA.Grant_Permission( '<user_name>', 'SYS:java.io.FilePermission','<<ALL FILES>>','read,write,execute,delete');