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
我正在尝试按如下方式执行 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