Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / MERGE и xml / 1 сообщений из 1, страница 1 из 1
24.07.2012, 10:40
    #37890111
Troglodit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MERGE и xml
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
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / MERGE и xml / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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