powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / xmltype поверх cursor в sql
5 сообщений из 5, страница 1 из 1
xmltype поверх cursor в sql
    #39373726
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как побороть то, что в 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
xmltype поверх cursor в sql
    #39373765
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
xmltype поверх cursor в sql
    #39373792
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
xmltype поверх cursor в sql
    #39375069
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
xmltype поверх cursor в sql
    #39376061
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем тут Clob?,

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


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