首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将值赋值给列xmltable

将值赋值给列xmltable
EN

Stack Overflow用户
提问于 2015-08-25 14:24:24
回答 2查看 812关注 0票数 0

我正在从一个包含xml文件的表中提取一些数据。下面是我使用的查询,它运行良好。

代码语言:javascript
复制
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文件中的值更新表字段。

我尝试使用以下代码:

代码语言:javascript
复制
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位产品”

如何为标志字段分配值?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-25 15:10:32

您得到的ORA-00902错误是因为您没有为标志列提供数据类型;这是可行的:

代码语言:javascript
复制
columns     CD_KEYWORD varchar2(200) path '.',
            FLAG varchar2(1) path '1'

或者更有可能:

代码语言:javascript
复制
columns     CD_KEYWORD varchar2(200) path '.',
            FLAG number path '1'

但是,正如@Boneist所示,您可以在select列表中提供固定的标志值,而不是试图将其强制放入XML中:

代码语言:javascript
复制
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'

票数 1
EN

Stack Overflow用户

发布于 2015-08-25 15:10:23

如果您所做的只是将一个文字值赋值给一个列,我只需要将它放在选择列表中,而不是在xmltable中,例如:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32206675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档