Как обновить узел XML, используя триггер в Oracle (XMLELEMENT) - PullRequest
0 голосов
/ 28 сентября 2018

Я только начинаю писать триггер в Oracle.И этот триггер должен изменить узел в xml, используя xmlements в Orecle

Это триггер:

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;

Теперь мне нужно обновить узел NEWS_NAME с использованием переменной v_new_name .

Я знаю, что могу обновить узел, используя простой запрос, подобный следующему примеру:

UPDATE SelectiveProcess SET dataNode =
   UPDATEXML(dataNode,
   '/DATAS/NEWS_NAME','TESTE NAME')
   WHERE ID = 3;

Но как это сделать в триггере?

1 Ответ

0 голосов
/ 28 сентября 2018

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...