Мне нужно передать коллекцию в JAVA ИСТОЧНИК в базе данных oracle.
Это иллюстрация текущей настройки без коллекции, где oracle varchar2 is mapped to java String
и она работает нормально
Код ниже: -
Источник java: -
import java.io.*;
public class Test_java extends Object{
public static String print_test(String test)
throws Exception
{
try{
System.out.println(test);
return "UP";
}
catch(Exception e)
{
return "DOWN" + e.getMessage();
}
}
};
Вызывающая функция: -
CREATE OR REPLACE FUNCTION FN_TEST_JAVA (p_test in varchar2)RETURN VARCHAR2 AS
LANGUAGE JAVA NAME 'Test_java.print_test(java.lang.String) return String';
Тестирование: -
begin
dbms_java.set_output(1000000);
dbms_output.put_line(FN_TEST_JAVA('this is a java source test 2'));
end;
Результат: -
this is a java source test 2
UP
Итак, мой вопрос в моей функции вместо VARCHAR2, могу ли я передать ассоциативный массив, вложенную таблицу или varray ??
В этом случае, каким будет отображение в источнике java ??
Текущий прогресс: -
Я создал источник java в Db, как показано ниже
import java.io.*;
public class Testarray_java extends Object{
public static String print_test(String test[])
throws Exception
{
try{
for (int i = 0; i < test.length; i++)
System.out.println("Element at index " + i +
" : "+ test[i]);
return "UP";
}
catch(Exception e)
{
return "DOWN" + e.getMessage();
}
}
};
и создал функцию, как показано ниже
create type test_java as table of varchar2(4000);
create or replace FUNCTION FN_TESTARRAY_JAVA (p_test in test_java)RETURN VARCHAR2 AS
LANGUAGE JAVA NAME 'Testarray_java.print_test(java.lang.String[]) return String';
Тестирование, как показано ниже, но оно не работает
declare
pp test_java:=test_java();
begin
pp.extend;
pp(pp.last):='san test 1';
pp.extend;
pp(pp.last):='san test 2';
dbms_output.put_line(FN_TESTARRAY_JAVA(pp));
end;
Получение следующей ошибки: -
ORA-00932: inconsistent datatypes: expected a Java type at argument position 2 to which some Oracle
value can be converted got something else