powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Парсинг XML в две таблицы
6 сообщений из 6, страница 1 из 1
Парсинг XML в две таблицы
    #39529296
ultrasonic7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, уважаемые форумчане!
...
Рейтинг: 0 / 0
Парсинг XML в две таблицы
    #39529306
ultrasonic7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть две таблицы:
Код: 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
Парсинг XML в две таблицы
    #39529312
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ultrasonic7,

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

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

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


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