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


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

--
Название темы поменял я
...
Рейтинг: 0 / 0
27.10.2005, 11:13
    #33346915
biomen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORACLE: вернуть CLOB из хранимой процедуры
А он (XMLDocument) в byte[], char[] или в String не преобразуется?
...
Рейтинг: 0 / 0
27.10.2005, 11:45
    #33347049
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORACLE: вернуть CLOB из хранимой процедуры
_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
28.10.2005, 07:43
    #33349029
_AndreyP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORACLE: вернуть CLOB из хранимой процедуры
Код: 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
28.10.2005, 08:15
    #33349055
_AndreyP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORACLE: вернуть CLOB из хранимой процедуры
нужно ли закрывать:
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
28.10.2005, 10:59
    #33349339
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORACLE: вернуть CLOB из хранимой процедуры
_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
28.10.2005, 11:50
    #33349484
_AndreyP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORACLE: вернуть CLOB из хранимой процедуры
спасибо за ответы.

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
28.10.2005, 12:32
    #33349615
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ORACLE: вернуть CLOB из хранимой процедуры
ок.
если хотите кидать туда-сюда xml-ки, в которых хранится инфа о "чем-то", то зачем это что-то преобразовывать каждый раз?
как вариант, храните инфу (или хотя бы ее часть, например, задачи/ответы) сразу в clob'ах в виде xml.
возможно, будет лучше юзать возможности апп. сервера, либо без возможностей бд, либо с ними... в общем, подумайте лучше, чего вы хотите добиться - уверен, что найдутся варианты оптимальнее текущего.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / ORACLE: вернуть CLOB из хранимой процедуры / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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