powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / DB2 9.1 для z/OS: XML в SQL процедурах
2 сообщений из 2, страница 1 из 1
DB2 9.1 для z/OS: XML в SQL процедурах
    #35949420
demidovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа,

Переезд с LUW на z/OS продолжается... Мучаюсь сейчас с XML в SQL процедурах. Итак, у меня изначально были процедуры, в которых
1) был входной параметр типа XML
2) были переменные типа XML
3) были длинные поля типа XML в выборках из XMLTABLE
Что-то типа этого:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE PROCEDURE SAVEDOCUMENT ( IN xmldoc XML )
BEGIN
  DECLARE SQLSTATE CHAR( 5 ) Default '00000';
  DECLARE docpart XML;
  
  DECLARE parts CURSOR FOR
  SELECT d.docpart FROM XMLTABLE('$s/part' PASSING xmldoc as "s"
	COLUMNS
	docpart XML path '.'
	) as d;
  OPEN parts;
  FETCH parts INTO docpart;
  WHILE SQLSTATE = '00000' DO
    CALL SAVEDOCPART(docpart);
    FETCH parts INTO docpart;
  END WHILE;
  CLOSE parts;
END

К сожалению, пункты 1-3 в z/OS версии мне не удается воплотить в жизнь. Пытался поменять XML на BLOB, но мне не дали это сделать для пункта 3:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE PROCEDURE SAVEDOCUMENT ( IN xmldoc BLOB(1M) )
BEGIN
  DECLARE SQLSTATE CHAR( 5 ) Default '00000';
  DECLARE docpart BLOB(1M);
  
  DECLARE parts CURSOR FOR
  SELECT d.docpart FROM XMLTABLE('$s/part' PASSING XMLPARSE(DOCUMENT xmldoc) as "s"
	COLUMNS
	docpart BLOB(1M) path '.'
	) as d;
  OPEN parts;
  FETCH parts INTO docpart;
  WHILE SQLSTATE = '00000' DO
    CALL SAVEDOCPART(docpart);
    FETCH parts INTO docpart;
  END WHILE;
  CLOSE parts;
END

Типа VACHAR(32000) мне не хватает.
Какие у кого мысли что делать?
...
Рейтинг: 0 / 0
DB2 9.1 для z/OS: XML в SQL процедурах
    #35961903
demidovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Примерно такой вариант работает, но он выглядит очень кривым (происходит явно лишняя конвертация из XML в текст и назад):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE PROCEDURE SAVEDOCUMENT ( IN xmldoc СLOB )
BEGIN
  DECLARE SQLSTATE CHAR( 5 ) Default '00000';
  DECLARE docpart СLOB;
  
  DECLARE parts CURSOR FOR
  SELECT XMLSERIALIZE(d.docpart AS CLOB)
  FROM XMLTABLE('$s/part' PASSING XMLPARSE(DOCUMENT xmldoc) as "s"
	COLUMNS
	docpart XML path '.'
	) as d;
  OPEN parts;
  FETCH parts INTO docpart;
  WHILE SQLSTATE = '00000' DO
    CALL SAVEDOCPART(docpart);
    FETCH parts INTO docpart;
  END WHILE;
  CLOSE parts;
END
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / DB2 9.1 для z/OS: XML в SQL процедурах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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