我正在从一个包含xml文件的表中提取一些数据。下面是我使用的查询,它运行良好。
select RecUid.CD_UID,
Abst2.*
from testtable2 t
cross join xmltable(xmlnamespaces(default 'xxxxxxxxxxxx'),
'records/REC'
passing t.xml_file
columns CD_UID varchar2(200) path 'UID',
--names xmltype path 'static_data/summary'
Abstract xmltype path 'static_data/keywords'
) RecUid
cross join xmltable(--xmlnamespaces(default 'http://scientific.thomsonreuters.com/schema/wok5.4/public/FullRecord'),
'keywords/keyword'
passing RecUid.Abstract
columns keyword varchar2(200) path '.'
) Abst2;我希望将这些字段插入到表中,但我也希望用不在XML文件中的值更新表字段。
我尝试使用以下代码:
INSERT INTO WOS_DM_KEYWORD
(
CD_UID
, CD_KEYWORD
, FLAG)
select RecUid.CD_UID
, Abst2.*
from testtable2 t
cross join xmltable(xmlnamespaces(default 'http://scientific.thomsonreuters.com/schema/wok5.4/public/FullRecord'),
'records/REC'
passing t.xml_file
columns CD_UID varchar2(200) path 'UID',
Abstract xmltype path 'static_data/fullrecord_metadata/keywords'
) RecUid
cross join xmltable(xmlnamespaces(default 'http://scientific.thomsonreuters.com /schema/wok5.4/public/FullRecord'),
'keywords/keyword'
passing RecUid.Abstract
columns CD_KEYWORD varchar2(200) path '.',
FLAG '1'
) Abst2
;但很明显它不起作用。
我们正在运行的是:“Oracle数据库11g企业版11.2.0.4.0 64位产品”
如何为标志字段分配值?
谢谢!
发布于 2015-08-25 15:10:32
您得到的ORA-00902错误是因为您没有为标志列提供数据类型;这是可行的:
columns CD_KEYWORD varchar2(200) path '.',
FLAG varchar2(1) path '1'或者更有可能:
columns CD_KEYWORD varchar2(200) path '.',
FLAG number path '1'但是,正如@Boneist所示,您可以在select列表中提供固定的标志值,而不是试图将其强制放入XML中:
INSERT INTO WOS_DM_KEYWORD
(
CD_UID
, CD_KEYWORD
, FLAG)
select RecUid.CD_UID
, Abst2.CD_KEYWORD
, '1'
from testtable2 t
cross join xmltable(xmlnamespaces(default 'http://scientific.thomsonreuters.com/schema/wok5.4/public/FullRecord'),
'records/REC'
passing t.xml_file
columns CD_UID varchar2(200) path 'UID',
Abstract xmltype path 'static_data/fullrecord_metadata/keywords'
) RecUid
cross join xmltable(xmlnamespaces(default 'http://scientific.thomsonreuters.com /schema/wok5.4/public/FullRecord'),
'keywords/keyword'
passing RecUid.Abstract
columns CD_KEYWORD varchar2(200) path '.'
) Abst2
;但是,如果标志字段是数字的,则再次使用1而不是'1'。
发布于 2015-08-25 15:10:23
如果您所做的只是将一个文字值赋值给一个列,我只需要将它放在选择列表中,而不是在xmltable中,例如:
INSERT INTO WOS_DM_KEYWORD (CD_UID,
CD_KEYWORD,
FLAG)
select RecUid.CD_UID,
Abst2.cd_keyword,
1 flag
from testtable2 t
cross join xmltable(xmlnamespaces(default 'http://scientific.thomsonreuters.com/schema/wok5.4/public/FullRecord'),
'records/REC'
passing t.xml_file
columns CD_UID varchar2(200) path 'UID',
Abstract xmltype path 'static_data/fullrecord_metadata/keywords'
) RecUid
cross join xmltable(xmlnamespaces(default 'http://scientific.thomsonreuters.com /schema/wok5.4/public/FullRecord'),
'keywords/keyword'
passing RecUid.Abstract
columns CD_KEYWORD varchar2(200) path '.'
) Abst2;https://stackoverflow.com/questions/32206675
复制相似问题