oracle 更改CLOB列中的值

wmomyfyw  于 2023-11-17  发布在  Oracle
关注(0)|答案(1)|浏览(185)

在“login”表中,有一个CLOB列,其中也用元素UserName编写了一个xml。

<login>
<UserName>Test</UserName>
<IpAddress>192.168.1.12</IpAddress>
</login>

字符串
如何更改或删除UserName每次和条目被添加到这个表?

plicqrtu

plicqrtu1#

如果你想删除UserName元素,那么你可以在XMLQUERY语句中使用FLOWR表达式来更新表中的所有现有值:

UPDATE login
SET value = XMLSERIALIZE(
              CONTENT XMLQUERY(
                'copy $e := /login
                 modify (
                   for $i in $e/UserName
                     return delete node $i
                 )
                 return $e'
                PASSING XMLTYPE(value)
                RETURNING CONTENT
              )
              AS CLOB  
            );

字符串
如果你想修改所有被INSERT艾德化的值,那么使用一个触发器:

CREATE TRIGGER remove_username
BEFORE INSERT ON login
FOR EACH ROW
BEGIN 
  SELECT XMLSERIALIZE(
           CONTENT XMLQUERY(
             'copy $e := /login
              modify (
                for $i in $e/UserName
                  return delete node $i
              )
              return $e'
             PASSING XMLTYPE(:NEW.value)
             RETURNING CONTENT
           )
           AS CLOB  
         )
  INTO   :NEW.value
  FROM   DUAL;
END;
/


fiddle

相关问题