powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Dynamic SQL в ХП
4 сообщений из 4, страница 1 из 1
Dynamic SQL в ХП
    #34656524
Hektor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, пожалуйста с запросом.
Необходимо в ХП динамически составить запросы.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DECLARE URL_PRELAST_PARAMETER_VALUE VARCHAR( 50 );
	DECLARE URL_PRELAST_PARAMETER_POSITION INT;
***************************************************************************
-- Следующий запрос необходимо вызывать динамически, где вместо 
-- URL_PRELAST_PARAMETER_POSITION подставляется  значение переменной.
	SELECT t.* INTO URL_PRELAST_PARAMETER_VALUE 
		FROM DASUSR1.ADDRESS_LOG i, 
		XMLTABLE('$c/address_post_form' passing i.ADDRESS_POST as "c" columns dom varchar( 100 )
		path 'parameter[@id=URL_PRELAST_PARAMETER_POSITION]') as t 
		WHERE i.POST_ID = USEQ;

В Dynamic SQL под DB2 я так и не разобрался.

________________________________________________________
________________________________________________________
...
Рейтинг: 0 / 0
Dynamic SQL в ХП
    #34656811
Hektor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здесь примерный код ХП:

Код: 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.
33.
34.
35.
CREATE PROCEDURE TECHNOLUX_INIT(IN USEQ INT, out URL_PRELAST_PARAMETER VARCHAR( 50 ))
LANGUAGE SQL
DYNAMIC RESULT SETS  1 
BEGIN ATOMIC
	-- ДИНАМИЧЕСКИЙ ЗАПРОС
	DECLARE STMT VARCHAR( 4096 );
	-- ПОСЛЕДНИЙ ПАРАМЕТР
	DECLARE URL_LAST_PARAMETER_VALUE VARCHAR( 50 ) DEFAULT '';
	-- ПРЕДПОСЛЕДНИЙ ПАРАМЕТР
	DECLARE URL_PRELAST_PARAMETER_VALUE VARCHAR( 50 );
	DECLARE URL_PRELAST_PARAMETER_POSITION INT;
	-- КОЛИЧЕСТВО ПАРАМЕТРОВ
	DECLARE URL_PARAMETERS_COUNT INT;
	
	-- Определить курсор
	DECLARE C1 CURSOR WITH RETURN FOR S1;
		
	DECLARE RC_E INT; -- Ошибка
	DECLARE STMT_E VARCHAR( 4096 ); --ошибка
	DECLARE SQLCODE INT default  0 ; -- SQLCODE ошибки
	DECLARE UNDO handler for sqlexception
		BEGIN
			SET RC_E=SQLCODE;
			INSERT INTO DASUSR1.ERROR_LOG VALUES (DATE(CURRENT DATE), TIME(CURRENT TIME), RC_E, STMT_E);
		END;

	SELECT t.* INTO URL_PARAMETERS_COUNT from DASUSR1.ADDRESS_LOG i, xmltable('$c/address_post_form' passing i.ADDRESS_POST as "c" columns UPC INT path 'parameters') as t WHERE i.POST_ID = USEQ;
	
	SET	STMT = 'SELECT t.* INTO URL_LAST_PARAMETER_VALUE from DASUSR1.ADDRESS_LOG i, xmltable("$c/address_post_form" passing i.ADDRESS_POST as "c" columns dom varchar(100) path "parameter[@id=?]") as t WHERE i.POST_ID = '||USEQ;
	PREPARE S1 FROM STMT;
	OPEN C1 USING URL_PARAMETERS_COUNT;
	SET URL_PRELAST_PARAMETER_POSITION = URL_PARAMETERS_COUNT -  1 ;
	SELECT t.* INTO URL_PRELAST_PARAMETER_VALUE from DASUSR1.ADDRESS_LOG i, xmltable('$c/address_post_form' passing i.ADDRESS_POST as "c" columns dom varchar( 100 ) path 'parameter[@id=URL_PRELAST_PARAMETER_POSITION]') as t WHERE i.POST_ID = USEQ;
	
	SET URL_PRELAST_PARAMETER = URL_LAST_PARAMETER_VALUE;
END@

ОШИБКА:com.ibm.db2.jcc.c.SqlException: An unexpected token "<variable declaration>" was found following "". Expected tokens may include: "<SQL statement>".
Код: plaintext
1.
2.
3.
4.
SELECT i.POST_ID, t.* 
from DASUSR1.ADDRESS_LOG i, 
xmltable('$c/address_post_form' passing i.ADDRESS_POST as "c" 
columns dom varchar( 100 ) path 'url_parameter[@id=2]') as t 
WHERE i.POST_ID =  23 @
Возвращяет необходимые данные


________________________________________________________
________________________________________________________
...
Рейтинг: 0 / 0
Dynamic SQL в ХП
    #34657098
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1.
Нарушен порядок деклараций.
порядок объявления: переменные, курсоры, хэндлеры.
У вас объявление курсора затесалось между объявлений переменных.
2.
Курсор объявите после переменных, перед хэндлером и уберите WITH RETURN.
3.
Код: plaintext
1.
2.
3.
4.
SET STMT = 'SELECT t.* from DASUSR1.ADDRESS_LOG i, xmltable(''$c/address_post_form'' passing i.ADDRESS_POST as "c" columns dom varchar(100) path ''parameter[@id='||RTRIM(CHAR(URL_PRELAST_PARAMETER_POSITION))||']'') as t WHERE i.POST_ID = '||RTRIM(CHAR(USEQ));
PREPARE S1 FROM STMT;
OPEN C1;
FETCH C1 INTO URL_PRELAST_PARAMETER_VALUE;
CLOSE C1;
...
Рейтинг: 0 / 0
Dynamic SQL в ХП
    #34661588
Hektor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СПАСИБО. НАКОНЕЦ ТО Я МОГУ ДВИГАТЬ ПРОЕКТЫ ДАЛЬШЕ.
________________________________________________________
________________________________________________________
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Dynamic SQL в ХП
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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