powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / MERGE и xml
1 сообщений из 1, страница 1 из 1
MERGE и xml
    #37890111
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DB2: 10.1 WIN 64

есть таблица

Код: sql
1.
2.
3.
4.
CREATE TABLE TEST.TABLE1  (
		  F1 INTEGER NOT NULL , 
		  F2 INTEGER NOT NULL , 
		  F_XML XML);


View
Код: sql
1.
2.
3.
4.
5.
6.
CREATE VIEW TEST.TABLE1_VIEW (F1 ,F2,ID) AS
SELECT 
	F1,
	F2,	
	XMLCAST(XMLQUERY('$F_XML/ROOT/C[@T="3"]/@ID') AS INTEGER) AS ID 
	FROM TEST.TABLE1


Trigger
Код: sql
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.
CREATE TRIGGER TEST.TABLE1_VIEW_INSERT INSTEAD OF INSERT ON TEST.TABLE1_VIEW 
REFERENCING NEW AS N 
FOR EACH ROW MODE DB2SQL 
BEGIN ATOMIC
MERGE INTO TEST.TABLE1 C
USING (
		SELECT 
			N.F1,
			N.F2,
			N.ID
		FROM 
			SYSIBM.SYSDUMMY1
		) T 
		ON C.F1=T.F1
WHEN 
	NOT MATCHED THEN
		INSERT(
			F1,
			F2,
			F_XML
			) 
		VALUES(
			T.F1,
			T.F2,
			XMLDOCUMENT(XMLQUERY('<ROOT><C T="1" ID="1"/><C T="3" ID="{$c}"/></ROOT>' passing T.ID as "c"))
			)
WHEN MATCHED THEN
UPDATE SET
	F2=T.F2,
	F_XML=XMLQUERY('copy $new :=$f_xml modify do replace value of $new/ROOT/C[@T="3"]/@ID with $c return $new' passing T.ID as "c",CASE WHEN F_XML IS NOT NULL THEN F_XML ELSE XMLPARSE(DOCUMENT '<ROOT/>' STRIP WHITESPACE); END as "f_xml");
END



В таком виде все работает, но это жуткая конструкция, при этом замена Update

Код: sql
1.
2.
3.
UPDATE SET
	F2=T.F2,
	F_XML=XMLQUERY('copy $new :=$f_xml modify do replace value of $new/ROOT/C[@T="3"]/@ID with $c return $new' passing T.ID as "c",F_XML as "f_xml");



возвращает ошибку при вставке записи
Код: sql
1.
insert into TEST.TABLE1_VIEW VALUES(1,1,2);


Ошибка в триггерном операторе SQL в триггерной процедуре "TEST.TABLE1_VIEW_INSERT". Код ошибки SQLCODE "-16084", состояние SQLSTATE "10705", элементы сообщения "".. SQLCODE=-723, SQLSTATE=09000, DRIVER=4.13.111
но если такая запись существует, то ошибки не возникает.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / MERGE и xml
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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