我刚刚开始在oracle中编写触发器。而且此触发器需要使用Orecle中的xmlements将节点修改为xml
这是触发器:
CREATE OR REPLACE TRIGGER trg_news_name
after insert on SelectiveProcess
for each ROW
declare
v_new_name VARCHAR2(400);
v_data xmltype;
BEGIN
v_data := :new.dataNode;
SELECT to_char(ExtractValue(v_data ,'/DATAS/NEWS_NAME'))
INTO
v_new_name
FROM DUAL;
v_new_name := :new.codigo || ' - ' || v_new_name ;
[.........]
end;
现在,我需要使用变量 v_new_name 更新节点 NEWS_NAME 。
我知道我可以使用一个简单的查询来更新节点,例如:
UPDATE SelectiveProcess SET dataNode =
UPDATEXML(dataNode,
'/DATAS/NEWS_NAME','TESTE NAME')
WHERE ID = 3;
但是如何在触发器中做到这一点?
答案 0 :(得分:1)
AFTER INSERT
触发器不允许您更新:NEW
值。
因此,基本上将其转换为BEFORE INSERT
并像在更新语句中那样覆盖:NEW
值。
select UPDATEXML(dataNode,
'/DATAS/NEWS_NAME', v_new_name ) INTO :new.dataNode FROM DUAL;
或者将它们放在一起。
SELECT UPDATEXML(dataNode,
'/DATAS/NEWS_NAME', :new.codigo || ' - '
to_char(ExtractValue(:new.dataNode ,'/DATAS/NEWS_NAME') ) ) INTO :new.dataNode FROM DUAL;