db2 v7R1 - 触发 INSERT New As XML Str

db2 v7R1 - Trigger INSERT New As XML Str

正在尝试将更改记录创建为 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... 没有骰子。

[]

编辑:

编辑 2:

我得到

‬‪‬‎[‪SQL0312‬‎]‪‬‎ ‪Variable‬‎ ‪ITEMNUMBER‬‎ ‪not‬‎ ‪defined‬‎ ‪or‬‎ ‪not‬‎ ‪usable‬‎.‪

对于以下查询?

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 
                       )
          );

试试这个...

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 
                       )
          );