我正在使用PLPGSQL来处理名为XMLland的XML列。 我有一个填充了土地信息的专栏,我无法改变,但我可以添加。
作为循环的一部分,我知道它是功能性的,由于其他语句,我希望插入一些额外的XML节点。但是我不熟悉PLPGSQL的特定功能。我正在使用REC来遍历表格。
当前XML的一个例子是
<area>
<type>
mixed
</type>
<population>
10,000
</population>
</area>
我希望在
中插入一个新节点<tree>
<height>
20m
</height>
<density>
6
</density>
</tree>
这是我正在使用的更新声明
UPDATE "dbLand".tbl_duration
SET XMLland.modify('
insert <tree><height>rec.height</height><density>rec.density</density> </tree> as first
into (/area)[1]')
WHERE referee = 'abc'
我收到错误 语法错误在或附近&#34;(&#34; SET oidetails.modify(&#39;
这是一个语法问题,还是不可能在PLPGSQL中使用.modify()
非常感谢
答案 0 :(得分:0)
完全错误 - 你不能用UPDATE
语句修改XML文档的某些部分 - 这个语句可以用来修改某些表的某些列值。
UPDATE table SET field WHERE constrains
PostgreSQL中的XML文档是不可变的 - 这意味着,您不能编辑文档,您必须创建新的更改文档,旧文档应该被新文档替换。更多 - PostgreSQL中的XML文档是+/-字符串 - 您可以像字符串一样修改XML。
postgres=# SELECT * FROM data;
┌───────────────────┐
│ d │
╞═══════════════════╡
│ <area> ↵│
│ <type> ↵│
│ mixed ↵│
│ </type> ↵│
│ <population> ↵│
│ 10,000 ↵│
│ </population>↵│
│ </area> │
└───────────────────┘
(1 row)
postgres=# UPDATE data SET d = replace(d::text, '</area>',
' <height>
20m
</height>
<density>
6
</density>
</area>')::xml;
UPDATE 1
postgres=# SELECT d FROM data;
┌───────────────────┐
│ d │
╞═══════════════════╡
│ <area> ↵│
│ <type> ↵│
│ mixed ↵│
│ </type> ↵│
│ <population> ↵│
│ 10,000 ↵│
│ </population>↵│
│ <height> ↵│
│ 20m ↵│
│ </height> ↵│
│ <density> ↵│
│ 6 ↵│
│ </density> ↵│
│ </area> │
└───────────────────┘
(1 row)
PostgreSQL没有任何XML函数更新的特殊功能。如果您需要它,那么您可以为存储的函数安装plv8 - javascript引擎,并且您可以使用javascript的任何相关功能。