powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / ORACLE: вернуть CLOB из хранимой процедуры
8 сообщений из 8, страница 1 из 1
ORACLE: вернуть CLOB из хранимой процедуры
    #33346855
Фотография _AndreyP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть хранимая процедура, которая строит XMLDocument.
как его преобразоватьв CLOB и вернуть в outXML[0] ?


Код: plaintext
1.
2.
3.
4.
5.
 public   static   void  buildX (  int  iUserID
                                  , CLOB []outXML
                                  )
  {
    XMLDocument xmldoc =  new  XMLDocument();    
   .....

--
Название темы поменял я
...
Рейтинг: 0 / 0
ORACLE: вернуть CLOB из хранимой процедуры
    #33346915
biomen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А он (XMLDocument) в byte[], char[] или в String не преобразуется?
...
Рейтинг: 0 / 0
ORACLE: вернуть CLOB из хранимой процедуры
    #33347049
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_AndreyPесть хранимая процедура, которая строит XMLDocument.
как его преобразоватьв CLOB и вернуть в outXML[0] ?


Код: plaintext
1.
2.
3.
4.
5.
 public   static   void  buildX (  int  iUserID
                                  , CLOB []outXML
                                  )
  {
    XMLDocument xmldoc =  new  XMLDocument();    
   .....

--
Название темы поменял я

// если я правильно понял
1) XMLDocument -> Stream
2) CLOB clob = CLOB.createTemporary()
3) писать в clob из стрима в п.1
4) вернуть clob

только я не понимаю зачем это нужно :-) можете расказать подробнее, что требуется?
...
Рейтинг: 0 / 0
ORACLE: вернуть CLOB из хранимой процедуры
    #33349029
Фотография _AndreyP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
 public   static   void  buildX (  int  iUserID
                            , CLOB[] outXML                            
//                            , String sEncoding
                            )
  {
    Connection connection =  null ; // Database connection object
    CallableStatement cstmt;
    ResultSet cursorDisipList;
    ResultSet cursorCourseList;
    XMLDocument xmldoc =  new  XMLDocument();
    xmldoc.setEncoding("UTF8");
//    xmldoc.setEncoding(sEncoding);
    Element root = xmldoc.createElement("COURSESBYUSER");
     Element eDiscipList = xmldoc.createElement("DLIST");
     root.appendChild(eDiscipList);
     Element eCourseList = xmldoc.createElement("course_list");
     root.appendChild(eCourseList);
    xmldoc.appendChild(root);
 try {
//........
//здесь построение документа по выборке из таблицы
//.......
      System.out.print("DOCUMENT");
      xmldoc.print(System.out);
      System.out.print("END DOCUMENT");
      cursorDisipList.close();
      cursorCourseList.close();
      cstmt.close();

outXML[ 0 ] = oracle.sql.CLOB.createTemporary(connection,
                              false, oracle.sql.CLOB.DURATION_SESSION);
outXML[ 0 ].open(CLOB.MODE_READWRITE);               

Writer w = outXML[ 0 ].getCharacterOutputStream();
PrintWriter pw =  new  PrintWriter(w);
xmldoc.print(pw);
}
 catch (SQLException ex){....} 
 catch  (IOException e) {....}
 finally  {}
}

сделал вот таим образом возврат CLOB.
CLOB возвращается и используется дальше java клиентом

подскажите, это корректный способ ?
может чего забыл закрыть, освободить ресурсы?

outXML[0] = oracle.sql.CLOB.createTemporary(connection,
false, oracle.sql.CLOB.DURATION_SESSION);
outXML[0].open(CLOB.MODE_READWRITE);
Writer w = outXML[0].getCharacterOutputStream();
PrintWriter pw = new PrintWriter(w);
xmldoc.print(pw);
...
Рейтинг: 0 / 0
ORACLE: вернуть CLOB из хранимой процедуры
    #33349055
Фотография _AndreyP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нужно ли закрывать:
w.close();
pw.close();


и очень интересует , почему мне понадобилось делать
Код: plaintext
1.
outXML[ 0 ] = oracle.sql.CLOB.createTemporary(connection,
                              false, oracle.sql.CLOB.DURATION_SESSION);


почему нельзя делать сразу
Код: plaintext
1.
Writer w = outXML[ 0 ].getCharacterOutputStream();
         PrintWriter pw =  new  PrintWriter(w);
...
Рейтинг: 0 / 0
ORACLE: вернуть CLOB из хранимой процедуры
    #33349339
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_AndreyP
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
 public   static   void  buildX (  int  iUserID
                            , CLOB[] outXML                            
//                            , String sEncoding
                            )
  {
    Connection connection =  null ; // Database connection object
    CallableStatement cstmt;
    ResultSet cursorDisipList;
    ResultSet cursorCourseList;
    XMLDocument xmldoc =  new  XMLDocument();
    xmldoc.setEncoding("UTF8");
//    xmldoc.setEncoding(sEncoding);
    Element root = xmldoc.createElement("COURSESBYUSER");
     Element eDiscipList = xmldoc.createElement("DLIST");
     root.appendChild(eDiscipList);
     Element eCourseList = xmldoc.createElement("course_list");
     root.appendChild(eCourseList);
    xmldoc.appendChild(root);
 try {
//........
//здесь построение документа по выборке из таблицы
//.......
      System.out.print("DOCUMENT");
      xmldoc.print(System.out);
      System.out.print("END DOCUMENT");
      cursorDisipList.close();
      cursorCourseList.close();
      cstmt.close();

outXML[ 0 ] = oracle.sql.CLOB.createTemporary(connection,
                              false, oracle.sql.CLOB.DURATION_SESSION);
outXML[ 0 ].open(CLOB.MODE_READWRITE);               

Writer w = outXML[ 0 ].getCharacterOutputStream();
PrintWriter pw =  new  PrintWriter(w);
xmldoc.print(pw);
}
 catch (SQLException ex){....} 
 catch  (IOException e) {....}
 finally  {}
}

сделал вот таим образом возврат CLOB.
CLOB возвращается и используется дальше java клиентом

подскажите, это корректный способ ?
может чего забыл закрыть, освободить ресурсы?
не знаю. вроде правильно, только потоки лучше закрывать.

Код: plaintext
1.
outXML[ 0 ] = oracle.sql.CLOB.createTemporary(connection,
                              false, oracle.sql.CLOB.DURATION_SESSION);
нужен для инициализации объекта,
Код: plaintext
1.
Writer w = outXML[ 0 ].getCharacterOutputStream();
         PrintWriter pw =  new  PrintWriter(w);

- вылетит с NullPointerException.

вопрос остался:
Зачем так извращаться? :-) Использование хранимых ява-процедур в данном случае нецелесообразно. Расскажите, чего вы хотите добиться в конечном итоге?
Oracle изначально имеет очень хорошие возможности по работе с XML (конечно, если есть XML DB ), и я думаю, что:
1) вам бы их хватило // и еще осталось
2) использование стандартных возможностей БД предпочтительней: админы будут меньше пинать, удобнее поддержка, и т.д.

если вам не хватает (либо отсутствуют) и этих функций, то реализовывать подобную логику лучше на middle-tier.

PS. Вот еще тынц FAQ на доку по LOB'ам
...
Рейтинг: 0 / 0
ORACLE: вернуть CLOB из хранимой процедуры
    #33349484
Фотография _AndreyP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо за ответы.

Timm
вопрос остался:
Зачем так извращаться? :-) Использование хранимых ява-процедур в данном случае нецелесообразно. Расскажите, чего вы хотите добиться в конечном итоге?


хех... попробую описать .
приложение - "редактор учебных курсов". пишется на java.
задачи "редактора" - создание, редактирование электронного учебника.
(заголовок, главы, лекции, задачи и вопросы для контроля)
редактор формирует некий учебник в виде XML-документа.
и сохраняет его в БД - просто передает этот XML-документ на сервер,
а сервер должен разобрать этот документ и раскидать данные по табличкам.
табличек может учавствовать несколько.
"редактор" - не хочет передавать данные в "обычном" виде.
а хочет именно в виде XML. И получать он их хочет так же только в виде XML. затем парсит и отображает во всяких swing-компонентах с возможностью редактирования.
соответственно сервер должен сформировать XML и отдать его "редактору".

в общем разговор получается "редактора" с "сервером" на XML.

первое, что пришло на ум через - CLOB,
просто потому, что не работал с XML DB. почитаю на выходных. попробую понять , что это такое.

возможностей PL/SQL
мне показалось не достаточно. возможно потому,
что в хелпе (у меня по 10g) Oracle® XML Developer's Kit Programmer's Guide
10g Release 1 (10.1)
из 24 глав, XSU for PL/SQL отведена только одна. остальной упор на java.
...
Рейтинг: 0 / 0
ORACLE: вернуть CLOB из хранимой процедуры
    #33349615
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок.
если хотите кидать туда-сюда xml-ки, в которых хранится инфа о "чем-то", то зачем это что-то преобразовывать каждый раз?
как вариант, храните инфу (или хотя бы ее часть, например, задачи/ответы) сразу в clob'ах в виде xml.
возможно, будет лучше юзать возможности апп. сервера, либо без возможностей бд, либо с ними... в общем, подумайте лучше, чего вы хотите добиться - уверен, что найдутся варианты оптимальнее текущего.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / ORACLE: вернуть CLOB из хранимой процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]