SELECT 查询 xmltable

SELECT query on xmltable

我正在尝试按如下方式执行 select 查询,其中我将一个小的 xml 作为 xmltype.

传递
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

但我得到以下结果

    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 开发人员

更改 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

结果将是:

1L  032 N
1L  000 
1L  000 
1L  000 
1B  001 N
1B  000 
1B  000 

仅对于第一次出现,结果将为:

1L 032 N
1B 001 N