Как сделать обертку для Java метода из другой схемы?
Есть две схемы:
schema_onefunctions.fn_run_java_wrap
schema_twojava_sources.java_code
Возможно ли сделать обертку для Java метода из другой схемы?
Пробовал так:
create or replace function schema_one.fn_run_java_wrap(
p_one in varchar2, p_two in varchar2, p_three in varchar2) return clob
AS LANGUAGE JAVA NAME 'schema_two.java_code.method(
java.lang.String, java.lang.String, java.lang.String) return Clob';
Но получаю ошибку о том, что такой класс shema_two/java_code не существует.
Что я делаю не так?
Есть ли другие способы запустить java-code из другой схемы?
Ответы (1 шт):
Нет, так нельзя: schema_two.java_code.method, разрешения имён не применимы к классам.
Как сказано в подглаве Defining Call Specifications:
A call specification and the Java method it publishes must reside in the same schema, unless the Java method has a
PUBLICsynonym.
Или сделайте обертку для Java-метода в той же схеме и дайте права не выполнение другий схеме. Или создайте публичный синоним, как в этом воспроизводимом примере:
create or replace and compile java source named schm.testnop AS
public class TestNop
{
public static String nop (String s) {
return s;
}
}
/
create public synonym "TestNop" for schm."TestNop"
/
create or replace function nop (s varchar2) return varchar2
as language java name 'TestNop.nop (java.lang.String) return java.lang.String';
/
select nop('abc') res from dual
/
RES
--------
abc