我从包含xml文件的表中提取一些数据。 我正在使用的查询如下,它工作正常。
SELECT Item_ID,
MAX(Start_Q),
Sum(Sold),
Sum(Transferred),
MIN(End_Q)
FROM your_table
WHERE [Date] BETWEEN '20-07-2015' AND '30-08-2015'
GROUP BY Item_ID
ORDER BY Item_ID
我想将这些字段插入表中,但我还想更新一个表字段,其值不在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;
但显然它不起作用。
我们正在运行:'Oracle Database 11g企业版11.2.0.4.0 64位生产'
如何为FLAG字段指定值?
谢谢!
答案 0 :(得分:1)
如果您所做的只是为列分配文字值,我只会在选择列表中而不是在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;
答案 1 :(得分:1)
您收到的ORA-00902错误是因为您没有提供标志列的数据类型;这有效:
columns CD_KEYWORD varchar2(200) path '.',
FLAG varchar2(1) path '1'
或者更有可能:
columns CD_KEYWORD varchar2(200) path '.',
FLAG number path '1'
但正如@Boneist所示,你可以在选择列表中提供固定的标志值,而不是试图将其强制转换为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'
。