powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / xmltable в динамическом запросе с параметром
3 сообщений из 3, страница 1 из 1
xmltable в динамическом запросе с параметром
    #37887172
K.T.V.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DB2 10 под z/os.
Задача: во входящем параметре типа xml передаются данные для запроса, который формируется динамически. Вопрос: как правильно получить их оттуда?
Пробовала подставлять в курсор через параметр - не работает.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE PROCEDURE TEST.SELECT_XML (IN xmlparam xml)
RESULT SETS 1
PL: BEGIN
    declare query VARCHAR(32704);
    declare c1 cursor with return for s1;
    SET query= 'select t.id_payment from 
	xmltable(''$c/begin/row'' passing ? as "c"
	columns id_payment BIGINT path ''id_payment'') as t;';
    prepare s1 from query;
    open c1 USING xmlparam;
END PL


Выдает ошибку:
"Exception occurred while running:
A database manager error occurred.SQLCODE: -171, SQLSTATE: 42815 - THE DATA TYPE, LENGTH, OR VALUE OF ARGUMENT 2 OF XMLTABLE IS INVALID. SQLCODE=-171, SQLSTATE=42815, DRIVER=3.62.56"

Не могу придумать лучшего решения, кроме как парсить в текстовую переменную, которую потом подставлять в динамический запрос:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE PROCEDURE TEST.SELECT_XML  (IN xmlparam xml, OUT query VARCHAR(32704))
PL: BEGIN
declare my_id_payment bigint;
declare SQLCODE        int;
declare c1 cursor for 
	select t.id_payment from 
	xmltable('$c/begin/row' passing xmlparam as "c"
	columns id_payment BIGINT path 'id_payment') as t;
set query='';
open c1;
fetch c1 into my_id_payment;
	while (SQLCODE!=100) do
		set query=query||','||my_id_payment;
		fetch c1 into my_id_payment;
	end while;
close c1;
set query=SUBSTR(query,2,length(query)-1);
END PLL


Но это же нерационально, есть ли другие варианты решения?
...
Рейтинг: 0 / 0
xmltable в динамическом запросе с параметром
    #37887638
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE PROCEDURE TEST.SELECT_XML
RESULT SETS 1
PL: BEGIN
	declare xmlparam xml;
    declare query VARCHAR(31000);
    declare c1 cursor with return for s1;
	set xmlparam=XMLPARSE(DOCUMENT '<begin><row><id_payment>1234</id_payment></row></begin>' STRIP WHITESPACE);
    SET query= 'select t.id_payment from 
	xmltable(''$c/begin/row'' passing CAST(? as xml) as "c"
	columns id_payment BIGINT path ''id_payment'') as t';
    prepare s1 from query;
    open c1 USING xmlparam;
END PL
...
Рейтинг: 0 / 0
xmltable в динамическом запросе с параметром
    #37888690
K.T.V.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Troglodit, огромнейшее спасибо, так все работает!!!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / xmltable в динамическом запросе с параметром
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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