db2 v7R1 - триггер INSERT, новый как XML Str - PullRequest
0 голосов
/ 25 мая 2018

Попытка создать запись изменений в виде строки XML.

Приведенный ниже код не работает, либо XML не может быть приведен к varchar, либо ошибка SQL неверна.

CREATE TRIGGER "QS36F"."WEBTEST1_I" 
    AFTER INSERT ON "QS36F"."WEBTEST1"
    REFERENCING  NEW AS R
    FOR EACH ROW MODE DB2SQL
INSERT INTO "QS36F"."WEBTEST2" ( PREVIOUS_R , NEW_R , ENTRY_DATE ) VALUES ( NULL , CAST(XMLROW(R.ID,R.ITEMNUMBER) as varchar(16355)), CURRENT_TIMESTAMP )

Такжепробовал

CREATE TRIGGER "QS36F"."WEBTEST1_I" 
    AFTER INSERT ON "QS36F"."WEBTEST1"
    REFERENCING  NEW AS R
    FOR EACH ROW MODE DB2SQL
INSERT INTO "QS36F"."WEBTEST2" ( PREVIOUS_R , NEW_R , ENTRY_DATE ) VALUES ( NULL ,  CAST((SELECT XMLROW(R.ID, R.ITEMNUMBER) FROM sysibm.sysdummy1) as varchar(16355)) , CURRENT_TIMESTAMP )

Также пытался сделать тип данных WEBTEST2 в виде XML ... Никаких кубиков.

[enter image description here]

РЕДАКТИРОВАТЬ: enter image description here

РЕДАКТИРОВАНИЕ2:

enter image description here

Я получаю

[SQL0312] Переменная ITEMNUMBER не определена илиНе используется.

для следующего запроса?

CREATE TRIGGER "QS36F"."WEBTEST1_U" 
    AFTER UPDATE ON "QS36F"."WEBTEST1"
    REFERENCING
    OLD AS o
    NEW AS r
    FOR EACH ROW MODE DB2SQL
    INSERT INTO 
     "QS36F"."WEBTEST2" ( NEW_R , PREVIOUS_R,  ENTRY_DATE ) 
                VALUES ( (select xmlserialize(XMLROW(id as id,itemnumber as itemnumber) as varchar(16355))
                          from table ( values (r.id, r.itemnumber)) as tbl
                          ), (select xmlserialize(XMLROW(id as id,itemnumber as itemnumber) as varchar(16355))
                          from table ( values (o.id, o.itemnumber)) as tbl
                          )
                       , CURRENT_TIMESTAMP 
                       )
          );

1 Ответ

0 голосов
/ 26 мая 2018

Попробуйте это ...

CREATE TRIGGER "QS36F"."WEBTEST1_I" 
    AFTER INSERT ON "QS36F"."WEBTEST1"
    REFERENCING  NEW AS R
    FOR EACH ROW MODE DB2SQL
    INSERT INTO 
     "QS36F"."WEBTEST2" ( NEW_R , ENTRY_DATE ) 
                VALUES ( (select xmlserialize(XMLROW(id as id,itemnumber as itemnumber) as varchar(16355))
                          from table ( values (r.id, r.itemnumber)) as tbl
                          )
                       , CURRENT_TIMESTAMP 
                       )
          );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...