Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Помогите создать XML из таблиц / 16 сообщений из 16, страница 1 из 1
15.11.2007, 14:17
    #34942126
indicatrix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать XML из таблиц
Нужно создать:
Код: 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
15.11.2007, 14:43
    #34942243
Hunterik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать XML из таблиц
А вот функция XMLCONCAT сюда не подойдет
...
Рейтинг: 0 / 0
15.11.2007, 14:58
    #34942305
indicatrix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать XML из таблиц
А как агрегацию в xroot сделать?
...
Рейтинг: 0 / 0
15.11.2007, 15:08
    #34942345
indicatrix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать XML из таблиц
Возможно я зря использую функцию XMLSERIALIZE, которая возвращает VARCHAR.
Как мне из таблиц получить объект с типом XML? (xroot - Node).
...
Рейтинг: 0 / 0
15.11.2007, 17:11
    #34942883
Hunterik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать XML из таблиц
Я думаю, что можно было бы просто, как строки собрать эти документы ( с помощью ', ', | ), но всё же сделал так...
Код: 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
15.11.2007, 17:16
    #34942896
Hunterik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать XML из таблиц
Если вывод завернуть в 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
15.11.2007, 17:47
    #34942976
indicatrix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать XML из таблиц
Спасибо большое за отклик!
Я не совсем точно сформулировал свою задачу,
если говорить по примеру, то нужно вывести всех сотрудников отдела

Код: 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
15.11.2007, 18:07
    #34943032
indicatrix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать XML из таблиц
Сделал вот такой вариант:
Код: 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
15.11.2007, 18:17
    #34943063
indicatrix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать XML из таблиц
В уровнем вложенности 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
15.11.2007, 18:48
    #34943124
Sarj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать XML из таблиц
А чем 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
15.11.2007, 22:49
    #34943422
Hunterik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать XML из таблиц
Мне лично просто интересно сделать функциями...
Собственно, такой же результат, как и у 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
16.11.2007, 08:54
    #34943703
indicatrix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать XML из таблиц
Господа, спасибо за помощь!
Мне как раз будут полезны оба варинта.
indicatrix :D
...
Рейтинг: 0 / 0
16.11.2007, 09:46
    #34943802
Sarj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать XML из таблиц
На моих тестах функциональный способ быстрее работает чем XMLQuery.
...
Рейтинг: 0 / 0
16.11.2007, 13:56
    #34944990
indicatrix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать XML из таблиц
С вашей помощью прямую задачу решил!
теперь передо мной встала обратная задача. Из
Код: 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
17.11.2007, 18:00
    #34946927
Hunterik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать XML из таблиц
Обратную, так обратную. Я сделал так...
Для 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
19.11.2007, 09:03
    #34947898
indicatrix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать XML из таблиц
Спасибо!

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


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