XMLSequence без использования SQL

Elic
Дата: 19.11.2008 11:40:07
К примеру:
declare
  xml XMLType := XMLType('<b><a>1</a><a>2</a><a>3</a></b>');
begin
  for c in (select value(t) as x from table(XMLSequence(xml.extract('//a'))) t) loop
    dbms_output.put_line(c.x.extract('a/text()').getStringVal);
  end loop;
end;
/

1
2
3

PL/SQL procedure successfully completed.
Но обращение к SQL движку выглядит как напрасное щёлканье контекстами.

Т.е. хотелось бы чистого PL/SQL:
declare
  xml XMLType := XMLType('<b><a>1</a><a>2</a><a>3</a></b>');
  x XMLSequenceType;
begin
  --x := XMLSequenceType(XMLType('<a>11</a>'), XMLType('<a>22</a>'), XMLType('<a>33</a>'));
  x := "Некий аналог XMLSequence?"(xml.extract('//a'));
  for i in 1 .. x.count loop
    dbms_output.put_line(x(i).extract('a/text()').getStringVal);
  end loop;
end;
/
Это возможно?
Zloxa
Дата: 19.11.2008 12:13:53
Elic
Это возможно?

А так можно?
  
declare
--...
 i number := 0;
 val XMLType;
begin
  --....
  loop
    i := i+1;
    val := XML.Extract('//a[position()='||i||']');
    exit when val is null;
    x.extend(1);
    x(x.count):= val;    
  end loop;
  --....
end;
Elic
Дата: 19.11.2008 12:31:30
Zloxa
А так можно?
    val := XML.Extract('//a[position()='||i||']');
    exit when val is null;
Так было (есть) :) Но как-то это неэстетично.
Yordan
Дата: 19.11.2008 17:38:32
declare
xml XMLType := XMLType('<b><a>1</a><a>2</a><a>3</a></b>');
x XMLSequenceType;
s varchar2(100);
begin
x := XMLSequenceType(XMLType('<a>11</a>'), XMLType('<a>22</a>'), XMLType('<a>33</a>'));
for i in 1 .. x.count loop
select cast(x(i) as varchar2(100) ) into s from dual;
s:=replace(replace( s ,'<a>',''),'</a>','');
dbms_output.put_line(s);
end loop;
end;
Elic
Дата: 19.11.2008 18:33:14
Yordan
  x := XMLSequenceType(XMLType('<a>11</a>'), XMLType('<a>22</a>'), XMLType('<a>33</a>'));
Мальчик, ты не в теме.
Yordan
    select cast(x(i) as varchar2(100) )  into s from dual;
    s:=replace(replace( s ,'<a>',''),'</a>','');
А такой бред больше не пиши.
VBR
Дата: 20.11.2008 09:30:01
А так?
declare
  xml XMLType := XMLType('<b><a>1</a><a>2</a><a>3</a></b>');
  xmlList XMLSequenceType;
begin

 SELECT   XMLSequence(xml.extract('//a')) into xmlList  FROM dual;

 FOR i IN 1 .. xmlList.count() LOOP
      dbms_output.put_line(xmlList(i).extract('a/text()').getStringVal());
 END LOOP;

end;
Elic
Дата: 20.11.2008 09:55:17
VBR
 SELECT   XMLSequence(xml.extract('//a')) into xmlList  FROM dual;
Спасибо. Хоть и не без SQL, но посимпатичней будет.
-old-
Дата: 20.11.2008 15:47:15
Elic
VBR
 SELECT   XMLSequence(xml.extract('//a')) into xmlList  FROM dual;
Спасибо. Хоть и не без SQL, но посимпатичней будет.


http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28369/xdb10pls.htm#i1034250
Elic
Дата: 20.11.2008 18:22:41
-old-
Дата: 20.11.2008 18:43:54
Elic
-old-
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28369/xdb10pls.htm#i1034250
Ну и что?


This section describes the PL/SQL DOM API for XMLType

Вроде было желание работать в чистом PL/SQL.