你好,我正在尝试在函数中使用xmltable,来更新其他表中的一些数据,至于输入,我得到了字符串
这是一个测试程序,最终结果将是插入应该从任何xml创建做一些数据调整
XML如下所示
<header>
<data>
<line>
<field1>some data in f1</field1>
<field2>other data f2</field2>
<field3>this data contains numers 012323</field3>
<field4>and the last data</field4>
<line>
</data>
</header>
我正在采取下一步行动
用转换成xml输入值的字符串创建表
create table if not exists test_xml_table as select input_string::xml as string_xml;
我会做一些数据调整
插入最终步骤
insert into test_tab( field1, field2, field3, field4 )
select xt.field1, xt.field2, xt.field3, field4 from test_xml_table
cross join xmltable( '/data/line' passing string_xml
columns field1 text path 'field1', field2 text path 'field2',
field3 text path 'field3', field4 text path 'field4' ) as xt;
问题是,如果表test_xml_table不存在,程序不会创建它(在创建表命令后仍然看不到它。我尝试做变通方案,首先创建表并用XML数据填充它,但现在我不知道在PASSING短语后放什么。没有错误,只是没有插入数据。将感谢帮助
整个代码如下
create or replace function test_function(
input_string character varying )
RETURNS void
LANGUAGE plpgsql
as $BODY$
begin
create table test_xml_table as select input_string::xml as string_xml;
insert into test_tab( field1, field2, field3, field4 )
select xt.field1, xt.field2, xt.field3, field4 from test_xml_table
cross join xmltable( '/data/line' passing string_xml
columns field1 text path 'field1', field2 text path 'field2',
field3 text path 'field3', field4 text path 'field4' ) as xt;
end;
$BODY$;
调用-〉
select test_function( '<header>
<data>
<line>
<field1>some data in f1</field1>
<field2>other data f2</field2>
<field3>this data contains numers 012323</field3>
<field4>and the last data</field4>
</line>
</data>
</header>' )
尝试使用postgres xmltable函数将数据插入到表中。我希望来自类型为 * 字符变化 * 的函数输入的数据将插入数据
1条答案
按热度按时间lskq00tm1#
不需要
cross join
。xml
namespace_uri
应该是/header/data/line
,而不仅仅是/data/line
Demo here