powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Проблемы с переносом XML-функций из процедуры Oracle в DB2
8 сообщений из 8, страница 1 из 1
Проблемы с переносом XML-функций из процедуры Oracle в DB2
    #37995641
dime-m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня!

Подскажите, пожалуйста: как переписать следующий запрос, чтобы он годился для использования в среде DB2?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select
       d.extract('//DATA_BOOK//VERSION_ID/text()').getStringVal() VERSION_ID,
       d.extract('//DATA_BOOK//TABLE_IND/text()').getStringVal() TABLE_IND,
       d.extract('//DATA_BOOK//COL_KEY/text()').getStringVal() COL_KEY,
       d.extract('//DATA_BOOK//ROW_KEY/text()').getStringVal() ROW_KEY,
       d.extract('//DATA_BOOK//DATA_TEMPL_DEPT_ID/text()').getStringVal() DATA_TEMPL_DEPT_ID,
       d.extract('//DATA_BOOK//VALUE/text()').getStringVal() VALUE,
       d.extract('//DATA_BOOK//FORMULA/text()').getStringVal() FORMULA,
       d.extract('//DATA_BOOK//NAME/text()').getStringVal() NAME,
       d.extract('//DATA_BOOK//SHEET_IND/text()').getStringVal() SHEET_IND,
       d.extract('//DATA_BOOK//TABLES_STRUCT_ID/text()').getStringVal() TABLES_STRUCT_ID,
       d.extract('//DATA_BOOK//TYPE/text()').getStringVal() AS TYPE
    from table(XMLSequence(XMLType((select COL from TMP)).extract('DataSetBook/DATA_BOOK'))) d;



Прочёл руководство "Oracle to DB2 Conversion Guide".
Некоторые замены функций сделал самостоятельно (надеюсь, что верно).
Запрос стал выглядеть так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT
       XMLCAST(D.XMLQUERY('//DATA_BOOK//VERSION_ID/text()')) VERSION_ID,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//TABLE_IND/text()')) TABLE_IND,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//COL_KEY/text()')) COL_KEY,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//ROW_KEY/text()')) ROW_KEY,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//DATA_TEMPL_DEPT_ID/text()')) DATA_TEMPL_DEPT_ID,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//VALUE/text()')) VALUE,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//FORMULA/text()')) FORMULA,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//NAME/text()')) NAME,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//SHEET_IND/text()')) SHEET_IND,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//TABLES_STRUCT_ID/text()')) TABLES_STRUCT_ID,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//TYPE/text()')) AS TYPE
    FROM TABLE(XMLSEQUENCE(XMLTYPE((SELECT COL FROM TMP)).XMLQUERY('DataSetBook/DATA_BOOK'))) D;



Но вот с последней строкой проблемы.
Не знаю аналогов функций XmlSequence и XmlType.

На что их заменить?

Спасибо :)
...
Рейтинг: 0 / 0
Проблемы с переносом XML-функций из процедуры Oracle в DB2
    #37995861
GVF112GVF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dime-mДоброго дня!

Подскажите, пожалуйста: как переписать следующий запрос, чтобы он годился для использования в среде DB2?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select
       d.extract('//DATA_BOOK//VERSION_ID/text()').getStringVal() VERSION_ID,
       d.extract('//DATA_BOOK//TABLE_IND/text()').getStringVal() TABLE_IND,
       d.extract('//DATA_BOOK//COL_KEY/text()').getStringVal() COL_KEY,
       d.extract('//DATA_BOOK//ROW_KEY/text()').getStringVal() ROW_KEY,
       d.extract('//DATA_BOOK//DATA_TEMPL_DEPT_ID/text()').getStringVal() DATA_TEMPL_DEPT_ID,
       d.extract('//DATA_BOOK//VALUE/text()').getStringVal() VALUE,
       d.extract('//DATA_BOOK//FORMULA/text()').getStringVal() FORMULA,
       d.extract('//DATA_BOOK//NAME/text()').getStringVal() NAME,
       d.extract('//DATA_BOOK//SHEET_IND/text()').getStringVal() SHEET_IND,
       d.extract('//DATA_BOOK//TABLES_STRUCT_ID/text()').getStringVal() TABLES_STRUCT_ID,
       d.extract('//DATA_BOOK//TYPE/text()').getStringVal() AS TYPE
    from table(XMLSequence(XMLType((select COL from TMP)).extract('DataSetBook/DATA_BOOK'))) d;



Прочёл руководство "Oracle to DB2 Conversion Guide".
Некоторые замены функций сделал самостоятельно (надеюсь, что верно).
Запрос стал выглядеть так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT
       XMLCAST(D.XMLQUERY('//DATA_BOOK//VERSION_ID/text()')) VERSION_ID,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//TABLE_IND/text()')) TABLE_IND,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//COL_KEY/text()')) COL_KEY,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//ROW_KEY/text()')) ROW_KEY,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//DATA_TEMPL_DEPT_ID/text()')) DATA_TEMPL_DEPT_ID,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//VALUE/text()')) VALUE,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//FORMULA/text()')) FORMULA,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//NAME/text()')) NAME,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//SHEET_IND/text()')) SHEET_IND,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//TABLES_STRUCT_ID/text()')) TABLES_STRUCT_ID,
       XMLCAST(D.XMLQUERY('//DATA_BOOK//TYPE/text()')) AS TYPE
    FROM TABLE(XMLSEQUENCE(XMLTYPE((SELECT COL FROM TMP)).XMLQUERY('DataSetBook/DATA_BOOK'))) D;



Но вот с последней строкой проблемы.
Не знаю аналогов функций XmlSequence и XmlType.

На что их заменить?

Спасибо :)

Здесь смотрел ? - DB2 9 pureXML Guide,
http://www.redbooks.ibm.com/redbooks/pdfs/sg247315.pdf

С уважением,
Вадим.
...
Рейтинг: 0 / 0
Проблемы с переносом XML-функций из процедуры Oracle в DB2
    #37996136
mustaccio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dime-m
Код: sql
1.
2.
   ...
    from table(XMLSequence(XMLType((select COL from TMP)).extract('DataSetBook/DATA_BOOK'))) d;




Поясните, пожалуйста: у вас в TMP.COL сидит CLOB, содержащий ХМЛ, и вам надо развернуть его в реляционную таблицу?

Если так, то, например
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select xx.* from
TMP.COL, 
xmltable('$x/DataSetBook/DATA_BOOK' 
  columns
    VERSION_ID integer path 'VERSION_ID',
    ...
    NAME varchar(20) path 'NAME',
    ...
  passing xmlparse(document COL) as "x") xx
...
Рейтинг: 0 / 0
Проблемы с переносом XML-функций из процедуры Oracle в DB2
    #37996188
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dime-m,

Добрый день.

Какого типа данных у вас поле TMP.COL (CLOB или XML) и как выгладит схематично xml значение?
Как-то так:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<DataSetBook>
  <DATA_BOOK>
    <VERSION_ID>V1</VERSION_ID>
    <TABLE_IND>1</TABLE_IND>
  </DATA_BOOK>
  <DATA_BOOK>
    <VERSION_ID>V2</VERSION_ID>
  </DATA_BOOK>
</DataSetBook>

?
...
Рейтинг: 0 / 0
Проблемы с переносом XML-функций из процедуры Oracle в DB2
    #37998036
dime-m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,

Поле TMP.COL типа CLOB. Содержит XML следующего вида:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<DataSetBook >
  <DATA_BOOK>
    <VERSION_ID>734</VERSION_ID>
    <TABLE_IND>1</TABLE_IND>
    <COL_KEY>7</COL_KEY>
    <ROW_KEY>4</ROW_KEY>
    <DATA_TEMPL_DEPT_ID>209</DATA_TEMPL_DEPT_ID>
    <VALUE>100060</VALUE>
    <FORMULA />
    <NAME>J7</NAME>
    <SHEET_IND>0</SHEET_IND>
    <TYPE>General</TYPE>
  </DATA_BOOK>
</DataSetBook>
...
Рейтинг: 0 / 0
Проблемы с переносом XML-функций из процедуры Oracle в DB2
    #37998077
dime-m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mustaccio,

Да, судя по получаемому результату, запрос работает именно так: разворачивает XML в таблицу.
Пробую использовать ваш вариант, пока ругается на недостающие скобки где-то около PASSING.
Сейчас буду пытаться это исправить.
...
Рейтинг: 0 / 0
Проблемы с переносом XML-функций из процедуры Oracle в DB2
    #37998086
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dime-m
Поле TMP.COL типа CLOB. Содержит XML следующего вида:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<DataSetBook >
  <DATA_BOOK>
    <VERSION_ID>734</VERSION_ID>
    <TABLE_IND>1</TABLE_IND>
    <COL_KEY>7</COL_KEY>
    <ROW_KEY>4</ROW_KEY>
    <DATA_TEMPL_DEPT_ID>209</DATA_TEMPL_DEPT_ID>
    <VALUE>100060</VALUE>
    <FORMULA />
    <NAME>J7</NAME>
    <SHEET_IND>0</SHEET_IND>
    <TYPE>General</TYPE>
  </DATA_BOOK>
</DataSetBook>

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select d.*
from tmp
, xmltable ('$x/DataSetBook/DATA_BOOK' passing tmp.col as "x"
columns 
  VERSION_ID INTEGER     PATH 'VERSION_ID'
, TABLE_IND  INTEGER     PATH 'TABLE_IND'
...
, FORMULA    VARCHAR(20) PATH 'FORMULA'
, NAME       VARCHAR(20) PATH 'NAME'
...
) d
...
Рейтинг: 0 / 0
Проблемы с переносом XML-функций из процедуры Oracle в DB2
    #37998674
dime-m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,

Спасибо за ответ!

Ваш вариант сработал, с той оговоркой, что вместо:
Код: plsql
1.
PASSING TMP.COL AS "x"


мне пришлось записать:
Код: plsql
1.
PASSING XMLPARSE(DOCUMENT TMP.COL) AS "x"


Без этой корректировки вываливалась ошибка: "Результат выражения промежуточного шага в выражении пути XQuery содержит атомарное значение".

Результирующий запрос имеет вид:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT D.*
  FROM TMP, XMLTABLE('$x/DataSetBook/DATA_BOOK' PASSING XMLPARSE(DOCUMENT TMP.COL) AS "x"
  COLUMNS
    VERSION_ID INTEGER PATH 'VERSION_ID',
    TABLE_IND INTEGER PATH 'TABLE_IND',
    COL_KEY INTEGER PATH 'COL_KEY',
    ROW_KEY INTEGER PATH 'ROW_KEY',
    DATA_TEMPL_DEPT_ID INTEGER PATH 'DATA_TEMPL_DEPT_ID',
    VALUE INTEGER PATH 'VALUE',
    FORMULA VARCHAR (2000) PATH 'FORMULA',
    NAME VARCHAR (250) PATH 'NAME',
    SHEET_IND INTEGER PATH 'SHEET_IND',
    TYPE VARCHAR (50) PATH 'TYPE') AS D


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


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