powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Помогите создать XML из таблиц
16 сообщений из 16, страница 1 из 1
Помогите создать XML из таблиц
    #34942126
indicatrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно создать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<xroot>
  <xtask xtask_id="1">
    <xtask_name>Form filling...</xtask_name>
    <xtask_start> 01 . 01 . 2007 </xtask_start>
    <xtask_finish> 31 . 12 . 2007 </xtask_finish>
  </xtask>
  <xfrms>
    <xfrm xname="бла бла" xfrm_id="1">
      <xidx xidx_id="1">
        <xidx_name>бла бла бла</xidx_name>
        <xidx_value></xidx_value>
      </xidx>
      <xidx>
        <xidx_name>...</xidx_name>
        <xidx_value></xidx_value>
      </xidx>
    </xfrm>
  </xfrms>
</xroot>

Есть код который создает ноду xtask
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT XMLSERIALIZE (
	CONTENT XMLELEMENT( 
	NAME "xtask",
        XMLATTRIBUTES (T.S_TASK_ID AS "xtask_id")
    , XMLELEMENT (NAME "xtask_name", T.TASK_NAME)
	, XMLELEMENT (NAME "xtask_start", T.START) 	
	, XMLELEMENT (NAME "xtask_finish", T.FINISH) 	
) AS VARCHAR( 2000 )
) AS TASKS
FROM S_TASKS as T;

Есть код который создает ноду xfrm
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SELECT XMLSERIALIZE (
	CONTENT 
    XMLELEMENT( 
        NAME "xfrm"
        , XMLATTRIBUTES (FI.FORM_ISSUE_NAME AS "xname", FI.D_FORM_ISSUE_ID AS "xfrm_id")
        , XMLELEMENT ( 
            NAME "xidx"
            , XMLATTRIBUTES (I.D_INDEX_ID AS "xidx_id")
            , XMLELEMENT (NAME "xidx_name", I.INDEX_NAME)
            , XMLELEMENT (NAME "xidx_value", ' ')
            , XMLELEMENT (
                NAME "xidx_mu"
                , XMLATTRIBUTES (I.D_MEASURE_UNIT_ID AS "xmu_id")
                , MU.MEASURE_UNIT_NAME
            )
        )
    ) AS VARCHAR( 2000 )
) AS FORMS
FROM ...

Как теперь объединить в ноду xroot?
...
Рейтинг: 0 / 0
Помогите создать XML из таблиц
    #34942243
Фотография Hunterik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот функция XMLCONCAT сюда не подойдет
...
Рейтинг: 0 / 0
Помогите создать XML из таблиц
    #34942305
indicatrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как агрегацию в xroot сделать?
...
Рейтинг: 0 / 0
Помогите создать XML из таблиц
    #34942345
indicatrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно я зря использую функцию XMLSERIALIZE, которая возвращает VARCHAR.
Как мне из таблиц получить объект с типом XML? (xroot - Node).
...
Рейтинг: 0 / 0
Помогите создать XML из таблиц
    #34942883
Фотография Hunterik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю, что можно было бы просто, как строки собрать эти документы ( с помощью ', ', | ), но всё же сделал так...
Код: plaintext
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.
SELECT XMLDOCUMENT ( 
   XMLELEMENT(
      NAME "BOTH",
      XMLCONCAT (
         XMLDOCUMENT
         (
            XMLELEMENT
            ( 
               NAME "EMPLOYEERS",
               XMLATTRIBUTES (T.EMPNO AS "emp_id")
               , XMLELEMENT (NAME "first_name", T.FIRSTNME)
	       , XMLELEMENT (NAME "last_name", T.LASTNAME) 	
	       , XMLELEMENT (NAME "salary", T.SALARY) 	
            )
         )
      ,
         XMLDOCUMENT
         (
            XMLELEMENT( 
               NAME "department"
               , XMLATTRIBUTES (D.DEPTNAME AS "dept_name")
               , XMLELEMENT ( 
                  NAME "dept_id"
                  , XMLATTRIBUTES (D.DEPTNO AS "dept_id")
                  , XMLELEMENT (NAME "dept_location", D.LOCATION)
                 )
            )
         )
      )
   )
)
FROM EMPLOYEE AS T,DEPARTMENT AS D;

По примеру можете собрать свой документ, данный вариант я пробовал на SAMPLE базе данных. Сделал навскидку буквально. Может что упустил, но вроде работает, может быть это и не оптимальное решение.
...
Рейтинг: 0 / 0
Помогите создать XML из таблиц
    #34942896
Фотография Hunterik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вывод завернуть в XMLSERIALIZE, то он будет таким:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<BOTH>
   <EMPLOYEERS emp_id="000010">
      <first_name>CHRISTINE</first_name>
      <last_name>HAAS</last_name>
      <salary> 0152750 . 00 </salary>
   </EMPLOYEERS>
   <department dept_name="SPIFFY COMPUTER SERVICE DIV.">
      <dept_id dept_id="A00">
      <dept_location/>
      </dept_id>
   </department>
</BOTH>

Вроде бы похоже на ваш пример. =)
...
Рейтинг: 0 / 0
Помогите создать XML из таблиц
    #34942976
indicatrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое за отклик!
Я не совсем точно сформулировал свою задачу,
если говорить по примеру, то нужно вывести всех сотрудников отдела

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<department>
   <department_info dept_name="SPIFFY COMPUTER SERVICE DIV.">
      <dept_id dept_id="A00">
      <dept_location/>
      </dept_id>
   </department_info>

   <EMPLOYEE  emp_id="000010">
      <first_name>CHRISTINE</first_name>
      <last_name>HAAS</last_name>
      <salary> 0152750 . 00 </salary>
   </EMPLOYEE>
   <EMPLOYEE  emp_id="000110">
      <first_name>VINCENZO</first_name>
      <last_name>LUCCHESSI</last_name>
      <salary> 66500 . 00 </salary>
   </EMPLOYEE>
	. . .
</department>
...
Рейтинг: 0 / 0
Помогите создать XML из таблиц
    #34943032
indicatrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал вот такой вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SELECT XMLDOCUMENT ( 
	XMLELEMENT (
		NAME "department"
        , XMLATTRIBUTES (D.DEPTNO AS "dept_id", D.DEPTNAME AS "dept_name")
		, XMLAGG (
			XMLELEMENT ( 
				NAME "employee",
				XMLATTRIBUTES (T.EMPNO AS "emp_id")
				, XMLELEMENT (NAME "first_name", T.FIRSTNME)
			    , XMLELEMENT (NAME "last_name", T.LASTNAME) 	
			    , XMLELEMENT (NAME "salary", T.SALARY) 	
			)
		)
	)
)
FROM EMPLOYEE AS T,DEPARTMENT AS D
WHERE T.WORKDEPT = D.DEPTNO
GROUP BY D.DEPTNO, D.DEPTNAME;

Выдает
Код: plaintext
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.
<department dept_id="A00" dept_name="SPIFFY COMPUTER SERVICE DIV.">
−
	<employee emp_id="000010">
<first_name>CHRISTINE</first_name>
<last_name>HAAS</last_name>
<salary> 0152750 . 00 </salary>
</employee>
−
	<employee emp_id="000110">
<first_name>VINCENZO</first_name>
<last_name>LUCCHESSI</last_name>
<salary> 0066500 . 00 </salary>
</employee>
−
	<employee emp_id="000120">
<first_name>SEAN</first_name>
<last_name>O'CONNELL</last_name>
<salary> 0049250 . 00 </salary>
</employee>
−
	<employee emp_id="200010">
<first_name>DIAN</first_name>
<last_name>HEMMINGER</last_name>
<salary> 0046500 . 00 </salary>
</employee>
−
	<employee emp_id="200120">
<first_name>GREG</first_name>
<last_name>ORLANDO</last_name>
<salary> 0039250 . 00 </salary>
</employee>
</department>

что меня вполне устроит, теперь надо разобраться почему в моих таблицах не работает.
...
Рейтинг: 0 / 0
Помогите создать XML из таблиц
    #34943063
indicatrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В уровнем вложенности 2 все хорошо,
а если я хочу в одном XML документе получить уровень 3, следующего вида:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<root>
<department dept_id="A00" dept_name="SPIFFY COMPUTER SERVICE DIV.">
  <employee emp_id="000010">
    <first_name>CHRISTINE</first_name>
    <last_name>HAAS</last_name>
    <salary> 0152750 . 00 </salary>
  </employee>
  <employee emp_id="000110">
    <first_name>VINCENZO</first_name>
    <last_name>LUCCHESSI</last_name>
    <salary> 0066500 . 00 </salary>
  </employee>
  . . .
</department>
<department>
  <employee ...
</department>
  . . . 
</root>
то появляются проблемы.
Не получается :(
...
Рейтинг: 0 / 0
Помогите создать XML из таблиц
    #34943124
Sarj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А чем XMLQuery не устраивает?

Можно примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
VALUES(
XMLQUERY('<root>
{ for $item in db2-fn:sqlquery("select XMLROW(d.dept_id,d.dept_name OPTION AS ATTRIBUTES) from DEPARTMENT AS D") 
return <departament id="{$item//@DEPT_ID}" typeid="{$item//@DEPT_NAME}">
{ for $iteme in db2-fn:sqlquery("select XMLROW(t.ID,t.FIRST_NAME,t.LAST_NAME,t.SALARY OPTION AS ATTRIBUTES) from EMPLOYEE AS T where T.WORKDEPT = parameter(1)",$item//@DEPT_ID) 
  return <employee emp_id="{$iteme//@ID}"><first_name>{$iteme//@FIRST_NAME}</first_name><last_name>{$iteme//@LAST_NAME}</last_name><salary>{$iteme//@SALARY}</salary></employee>
}
</departament>
}
</root>'));
...
Рейтинг: 0 / 0
Помогите создать XML из таблиц
    #34943422
Фотография Hunterik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне лично просто интересно сделать функциями...
Собственно, такой же результат, как и у XMLQuery получается так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SELECT XMLDOCUMENT(XMLELEMENT ( NAME "root", XMLAGG (XT.XMLDOC))) FROM TABLE
( SELECT XMLDOCUMENT ( 
	XMLELEMENT (
		NAME "department"
        , XMLATTRIBUTES (D.DEPTNO AS "dept_id", D.DEPTNAME AS "dept_name")
		, XMLAGG (
			XMLELEMENT ( 
				NAME "employee",
				XMLATTRIBUTES (T.EMPNO AS "emp_id")
				, XMLELEMENT (NAME "first_name", T.FIRSTNME)
			    , XMLELEMENT (NAME "last_name", T.LASTNAME) 	
			    , XMLELEMENT (NAME "salary", T.SALARY) 	
			)
		)
	)
) AS XMLDOC
FROM EMPLOYEE AS T,DEPARTMENT AS D
WHERE T.WORKDEPT = D.DEPTNO
GROUP BY D.DEPTNO, D.DEPTNAME) AS XT;
...
Рейтинг: 0 / 0
Помогите создать XML из таблиц
    #34943703
indicatrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, спасибо за помощь!
Мне как раз будут полезны оба варинта.
indicatrix :D
...
Рейтинг: 0 / 0
Помогите создать XML из таблиц
    #34943802
Sarj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На моих тестах функциональный способ быстрее работает чем XMLQuery.
...
Рейтинг: 0 / 0
Помогите создать XML из таблиц
    #34944990
indicatrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С вашей помощью прямую задачу решил!
теперь передо мной встала обратная задача. Из
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<root>
<department dept_id="A00" dept_name="SPIFFY COMPUTER SERVICE DIV.">
  <employee emp_id="000010">
    <first_name>CHRISTINE</first_name>
    <last_name>HAAS</last_name>
    <salary> 0152750 . 00 </salary>
  </employee>
  <employee emp_id="000110">
    <first_name>VINCENZO</first_name>
    <last_name>LUCCHESSI</last_name>
    <salary> 0066500 . 00 </salary>
  </employee>
  . . .
</department>
<department>
  <employee ...
</department>
  . . . 
</root>

записать в таблицу EMPLOYEE.

Теперь мне нужно использовать XQuery?
Как можно скомбинировать
Код: plaintext
1.
insert into EMPLOYEE ...
с запросом по XML данным?
...
Рейтинг: 0 / 0
Помогите создать XML из таблиц
    #34946927
Фотография Hunterik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обратную, так обратную. Я сделал так...
Для employee таблицы.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT "empno" as EMPNO,
       "firstname" as FIRSTNAME,
       "lastname" AS LASTNAME,
       "salary" as SALARY,
       "workdept" AS WORKDEPT
  FROM XMLBUFFER, XMLTABLE 
       (
          '$doc/root/department/employee' PASSING xmlbuffer.xmldata as "doc"
           COLUMNS
              "empno" character( 6 ) PATH '@emp_id',
              "firstname" varchar( 12 ) PATH 'first_name',
              "lastname" varchar( 15 ) PATH 'last_name',
              "salary" decimal( 9 , 2 ) PATH 'salary',
              "workdept" character( 3 ) PATH '../@dept_id'
) AS XT;
Для department таблицы.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT "deptno" as DEPTNO,
       "deptname" as DEPTNAME
  FROM XMLBUFFER, XMLTABLE 
       (
          '$doc/root/department' PASSING xmlbuffer.xmldata as "doc"
           COLUMNS
              "deptno" character( 3 ) PATH '@dept_id',
              "deptname" varchar( 36 ) PATH '@dept_name'
) AS XT;
Вставить данные в нужную табличку можно сразу же, сделав так:
Код: plaintext
1.
INSERT INTO test_employee (SELECT "empno" AS EMPNO ... AS XT);
...
Рейтинг: 0 / 0
Помогите создать XML из таблиц
    #34947898
indicatrix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!

Взятие родительской ноды: "../@dept_id", вот что помогло особенно.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Помогите создать XML из таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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