首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择对xmltable的查询

选择对xmltable的查询
EN

Stack Overflow用户
提问于 2016-10-27 14:25:53
回答 1查看 553关注 0票数 0

我试图按照以下方式执行一个select查询,其中我将一个小xml作为xmltype传递。

代码语言:javascript
复制
SELECT x.PO_STEP,x.INSTL_ID,X.INSTL_LOC_CODE from xmltable
(
  XMLNAMESPACES('namespace1' as "v20", 'namespace2' as "v201"),
'/v20:ProductionOrder/v201:ProductionOrderSteps/v201:ProductionOrderStep/v201:POStepDetails/v201:InstallationDetails/*[text()]'
PASSING xmltype(' <v20:ProductionOrder xmlns="***something***" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v20="namespace1">

        <v201:ProductionOrderSteps xmlns:v201="namespace2">
          <v201:ProductionOrderStep>
            <v201:POStepDetails>
              <v201:PO_STEP>1L</v201:PO_STEP>
              <v201:InstallationDetails>
                <v201:INSTL_ID>032</v201:INSTL_ID>
                <v201:INSTL_LOC_CODE>N</v201:INSTL_LOC_CODE>
              </v201:InstallationDetails>
              <v201:InstallationDetails>
                <v201:INSTL_ID>000</v201:INSTL_ID>
                <v201:INSTL_LOC_CODE />
              </v201:InstallationDetails>
              <v201:InstallationDetails>
                <v201:INSTL_ID>000</v201:INSTL_ID>
                <v201:INSTL_LOC_CODE />
              </v201:InstallationDetails>
              <v201:InstallationDetails>
                <v201:INSTL_ID>000</v201:INSTL_ID>
                <v201:INSTL_LOC_CODE />
              </v201:InstallationDetails>
            </v201:POStepDetails>
          </v201:ProductionOrderStep>
          <v201:ProductionOrderStep>
            <v201:POStepDetails>
              <v201:PO_STEP>1B</v201:PO_STEP>
              <v201:InstallationDetails>
                <v201:INSTL_ID>001</v201:INSTL_ID>
                <v201:INSTL_LOC_CODE>N</v201:INSTL_LOC_CODE>
              </v201:InstallationDetails>
              <v201:InstallationDetails>
                <v201:INSTL_ID>000</v201:INSTL_ID>
                <v201:INSTL_LOC_CODE />
              </v201:InstallationDetails>
              <v201:InstallationDetails>
                <v201:INSTL_ID>000</v201:INSTL_ID>
                <v201:INSTL_LOC_CODE />
              </v201:InstallationDetails>
            </v201:POStepDetails>
          </v201:ProductionOrderStep>
        </v201:ProductionOrderSteps>
      </v20:ProductionOrder>')

 COLUMNS
 PO_STEP VARCHAR2(20) PATH './parent::*/parent::*/v201:PO_STEP',
 INSTL_ID VARCHAR2(30) PATH '//v201:INSTL_ID',
 INSTL_LOC_CODE VARCHAR2(30) PATH '//v201:INSTL_LOC_CODE'
)x

但是我得到了以下结果

代码语言:javascript
复制
    PO_STEP     INSTL_ID  INSTL_LOC_CODE
        1L      null        null
        1L      null        null
        1L      null        null
        1L      null        null
        1L      null        null
        1B      null        null
        1B      null        null
        1B      null        null
        1B      null        null

我无法理解Xpath有什么问题,xpath是被错误地传递到列的旁边,还是上面写的xpath是错误的。我正在使用oracle sql developer。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-27 14:59:30

更改xpath

/v20:ProductionOrder/v201:ProductionOrderSteps/v201:ProductionOrderStep/v201:POStepDetails/v201:InstallationDetails/*[text()]

/v20:ProductionOrder/v201:ProductionOrderSteps/v201:ProductionOrderStep/v201:POStepDetails/v201:InstallationDetails

要获得第一次出现,最后添加[1]如下:

/v20:ProductionOrder/v201:ProductionOrderSteps/v201:ProductionOrderStep/v201:POStepDetails/v201:InstallationDetails[1]

变化

./parent::*/parent::*/v201:PO_STEP

./parent::*/v201:PO_STEP

其结果将是:

代码语言:javascript
复制
1L  032 N
1L  000 
1L  000 
1L  000 
1B  001 N
1B  000 
1B  000 

仅就第一次发生而言,其结果是:

代码语言:javascript
复制
1L 032 N
1B 001 N
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40287220

复制
相关文章

相似问题

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