Как сопоставить вложенную таблицу, ассоциативный массив или varray с JAVA SOURCE в Oracle DB - PullRequest
0 голосов
/ 08 мая 2020

Мне нужно передать коллекцию в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...