Чтение DBMS_Ouptut после выполнения PLSQL из jdbc - PullRequest
0 голосов
/ 04 мая 2018

Мне нужно выполнить инструкцию Oralce PL / SQL с помощью jdbc, но я пытаюсь найти способ извлечения данных.

Вот мое заявление

DECLARE 
   l_xmltype XMLTYPE; 
   l_ctx dbms_xmlgen.ctxhandle; 
BEGIN 
   l_ctx := dbms_xmlgen.newcontext('select * from myTable where rownun < 10;); 
   dbms_xmlgen.setrowsettag(l_ctx, 'My_DATA'); 
   dbms_xmlgen.setrowtag(l_ctx, 'My_Element'); 
   l_xmltype := dbms_xmlgen.getXmlType(l_ctx) ; 
   dbms_xmlgen.closeContext(l_ctx);  
  dbms_output.put_line(l_xmltype.getClobVal); 
  dbms_output.get_lines(?, l_xmltype);
End;

И мой код

CallableStatement cs = connection.prepareCall(plsql);
cs.registerOutParameter(1, Types.ARRAY,"DBMSOUTPUT_LINESARRAY");
cs.execute();

Array array = null;
array = cs.getArray(1);
Stream.of((Object[]) array.getArray())
    .forEach(System.out::println);

И я получаю ошибку

java.sql.SQLException: ORA-06550: строка 1, столбец 380: PLS-00306: неверно количество или типы аргументов в вызове 'GET_LINES'

Я не эксперт по PL / SQL или jdbc, поэтому я изо всех сил пытаюсь найти решение.

1 Ответ

0 голосов
/ 04 мая 2018

Второй аргумент GET_LINES - это число, а не XMLTYPE. Измените свой вызов на что-то вроде:

dbms_output.get_lines(?, 50);

Я также показал более полный пример того, как это сделать в аналогичном вопросе . Обратите внимание, что вы также должны сначала добавить следующий вызов, чтобы включить dbms_output collection:

dbms_output.enable();
...