Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / xmltype поверх cursor в sql / 5 сообщений из 5, страница 1 из 1
23.12.2016, 13:37
    #39373726
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xmltype поверх cursor в sql
Как побороть то, что в row-элементах теряется информация о null-овых child-ах? Хочется иметь информацию обо всех полях курсора и порядке их следования. 11.2.0.4.0
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with t as (
select dummy, null as x from dual union all
select dummy, 12        from dual union all
select null , 25        from dual union all
select null , null      from dual
)
select xmltype(cursor(select * from t)) x
from dual;

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?xml version="1.0"?>
<ROWSET>
  <ROW>
    <DUMMY>X</DUMMY>
  </ROW>
  <ROW>
    <DUMMY>X</DUMMY>
    <X>12</X>
  </ROW>
  <ROW>
    <X>25</X>
  </ROW>
  <ROW>
 </ROW>
</ROWSET>
...
Рейтинг: 0 / 0
23.12.2016, 14:09
    #39373765
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xmltype поверх cursor в sql
...
Рейтинг: 0 / 0
23.12.2016, 14:36
    #39373792
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xmltype поверх cursor в sql
Elic,

Спасибо. Заюзал так.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create or replace function getx(p_cursor sys_refcursor) return xmltype as
ctxHandle dbms_xmlgen.ctxHandle;
c         clob;
x         xmltype;
begin
    ctxHandle := dbms_xmlgen.newContext(p_cursor);
    dbms_xmlgen.setNullHandling(ctxHandle, 1); 
    c :=  dbms_xmlgen.getXML(ctxHandle);    
    x := xmltype(c);
    dbms_xmlgen.closecontext(ctxHandle);
    dbms_lob.freetemporary(c);    
    return x;
end;  

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with t as (
select dummy, null as x from dual union all
select dummy, 12        from dual union all
select null , 25        from dual union all
select null , null      from dual
)
select
getx(cursor(select * from t))
from dual;

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<?xml version="1.0"?>
<ROWSET xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ROW>
    <DUMMY>X</DUMMY>
    <X xsi:nil="true"/>
  </ROW>
  <ROW>
    <DUMMY>X</DUMMY>
    <X>12</X>
  </ROW>
  <ROW>
    <DUMMY xsi:nil="true"/>
    <X>25</X>
  </ROW>
  <ROW>
    <DUMMY xsi:nil="true"/>
    <X xsi:nil="true"/>
  </ROW>
</ROWSET>
...
Рейтинг: 0 / 0
26.12.2016, 10:38
    #39375069
xmltype поверх cursor в sql
AmKadСпасибо. Заюзал так.


Код: plsql
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.
Connected to Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 
Connected as sms@lsmdev

SQL> 
SQL> create or replace function getx(p_cursor sys_refcursor) return xmltype as
  2  ctxHandle dbms_xmlgen.ctxHandle;
  3  c         clob;
  4  x         xmltype;
  5  begin
  6      ctxHandle := dbms_xmlgen.newContext(p_cursor);
  7      dbms_xmlgen.setNullHandling(ctxHandle, 1);
  8      --c :=  dbms_xmlgen.getXML(ctxHandle);
  9      --x := xmltype(c);
 10      x := dbms_xmlgen.getXMLType(ctxHandle);
 11      dbms_xmlgen.closecontext(ctxHandle);
 12      --dbms_lob.freetemporary(c);
 13      return x;
 14  end;
 15  /
Function created
SQL> select getx(cursor(select null val, dummy from dual)).getStringVal(1,2) from dual;
GETX(CURSOR(SELECTNULLVAL,DUMM
--------------------------------------------------------------------------------
<ROWSET xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ROW>
    <VAL xsi:nil="true"/>
    <DUMMY>X</DUMMY>
  </ROW>
</ROWSET>
...
Рейтинг: 0 / 0
27.12.2016, 14:09
    #39376061
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xmltype поверх cursor в sql
Зачем тут Clob?,

Благодарю за замечание.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / xmltype поверх cursor в sql / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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