Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Парсинг XML в две таблицы / 6 сообщений из 6, страница 1 из 1
02.10.2017, 11:48
    #39529296
ultrasonic7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML в две таблицы
Доброго времени суток, уважаемые форумчане!
...
Рейтинг: 0 / 0
02.10.2017, 11:57
    #39529306
ultrasonic7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML в две таблицы
Есть две таблицы:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create table schematest.dept
(
  deptno  number,
  loc varchar2(100 char),
  dname varchar2(100 char)
);

create table schematest.emp
(
  deptno  number,
  empno  number,
  ename varchar2(100 char),
  sal number
);



и код, который должен создавать объект типа XMLType, а затем раскидывать содержимое этого объекта по двум этим таблицам.
Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
declare
xml_var XMLType;
begin
  select XMLType('
  <rowset>
    <employee>
      <deptno>40</deptno>
      <empno>1111</empno>
      <ename>Queen</ename>
      <sal>7000</sal>
    </employee>
    <department>
      <deptno>50</deptno>
      <dname>MARKETING</dname>
      <loc>MOSCOW</loc>
    </department>
    <employee>
      <deptno>40</deptno>
      <empno>2222</empno>
      <ename>Duke</ename>
      <sal>4000</sal>
    </employee>
    <employee>
      <deptno>50</deptno>
      <empno>3333</empno>
      <ename>Earl</ename>
      <sal>6000</sal>
    </employee>
  </rowset>
  ') into xml_var 
  from dual;

  INSERT FIRST
  WHEN empno IS NULL THEN INTO SCHEMATEST.dept ( deptno, dname, loc )
                                        VALUES ( deptno, dname, loc )
  WHEN empno IS NOT NULL THEN INTO SCHEMATEST.emp ( empno, ename, sal, deptno )
                                           VALUES ( empno, ename, sal, deptno )
   
  SELECT  y.dname
        , y.loc
        , y.deptno
        , y.empno
        , y.ename
        , y.sal
  FROM XMLTABLE ('for $i in /ROWSET/(employee|department) return $i'
                 PASSING xml_var
                 COLUMNS   dname   varchar2(100 char) PATH '/department/dname'
                         , loc     VARCHAR2(100 char) PATH '/department/loc' 
                         , deptno  number PATH './deptno'
                         , empno   NUMBER PATH '/employee/empno'
                         , ename   varchar2(100 char) PATH '/employee/ename'
                         , sal     NUMBER PATH '/employee/sal'
                 ) AS y;

  EXCEPTION 
    WHEN NO_DATA_FOUND THEN  DBMS_OUTPUT.PUT_LINE('NO_DATA_FOUND');
    WHEN TOO_MANY_ROWS THEN  DBMS_OUTPUT.PUT_LINE('TOO_MANY_ROWS'); 
end;


Но в результате строки в таблицы не попадают. Где может скрываться ошибка?
...
Рейтинг: 0 / 0
02.10.2017, 12:01
    #39529312
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML в две таблицы
ultrasonic7,

XPath is case sensitive
...
Рейтинг: 0 / 0
02.10.2017, 12:12
    #39529326
ultrasonic7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML в две таблицы
Спасибо, env . Я rowset в нижний регистр перевести забыл.
...
Рейтинг: 0 / 0
02.10.2017, 13:44
    #39529376
ultrasonic7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML в две таблицы
А в этой строке
Код: plsql
1.
for $i in /rowset/(employee|department) return $i

, как я понимаю, объявляется некий цикл по набору. Где бы почитать про синтаксис циклов for..in в XPath?
...
Рейтинг: 0 / 0
02.10.2017, 14:25
    #39529398
XMLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML в две таблицы
ultrasonic7А в этой строке
Код: plsql
1.
for $i in /rowset/(employee|department) return $i

, как я понимаю, объявляется некий цикл по набору. Где бы почитать про синтаксис циклов for..in в XPath?
зачем тебе цикл? для того чтобы выбрать все дочерние элементы xquery не требуется, достаточно xpath
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Парсинг XML в две таблицы / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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