Sql 需要从XML列编写oracle查询的帮助吗

Sql 需要从XML列编写oracle查询的帮助吗,sql,xml,oracle,Sql,Xml,Oracle,我在oracle table XML列中有以下XML: <?xml version="1.0" encoding="UTF-8"?> <Employee> <Emp_information emp_name="SSS"> </Emp_information> <emp_content> <emp_part part_id="A" > <emp_scoring_information e

我在oracle table XML列中有以下XML:

<?xml version="1.0" encoding="UTF-8"?>
<Employee>
  <Emp_information emp_name="SSS">
  </Emp_information>
  <emp_content>
    <emp_part part_id="A" >
       <emp_scoring_information equivalent_value="Test" >
        <empset empset_weight="1">
          <emp_key value="1"/>
        </empset>
      </emp_scoring_information>
    </emp_part>
    <emp_part part_id="B" >
      <emp_scoring_information equivalent_value_flag="Test1" >
        <empset empset_weight="1" >
          <emp_key value="1"/>
          <emp_key value="2"/>
        </empset>
      </emp_scoring_information>
    </emp_part>
  </emp_content>
</Employee>
如何解决使用SQL查询打印以下格式数据的问题

我想详细解释输出值A=1,B=1,2 A=1 A是来自emp_part_id的值=是静态值,1是来自empset emp_key value的值,就像它需要为下一个emp_part做同样的事情一样,而且part_id B有多个emp_key value的empset,在这种情况下,它需要显示B=1,2。每个零件之间用逗号A=1、B=1,2分隔

with src as (select xmltype('<Employee>
  <Emp_information emp_name="SSS">
  </Emp_information>
  <emp_content>
    <emp_part part_id="A" >
       <emp_scoring_information equivalent_value="Test" >
        <empset empset_weight="1">
          <emp_key value="1"/>
        </empset>
      </emp_scoring_information>
    </emp_part>
    <emp_part part_id="B" >
      <emp_scoring_information equivalent_value_flag="Test1" >
        <empset empset_weight="1" >
          <emp_key value="1"/>
          <emp_key value="2"/>
        </empset>
      </emp_scoring_information>
    </emp_part>
  </emp_content>
</Employee>') xml  from dual)
select xmlquery('string-join($d/Employee/emp_content/emp_part/concat(@part_id,"=",string-join(emp_scoring_information/empset/emp_key/@value,",") ),",")' passing xml as "d" returning content) from src
字符串连接-使用分隔符连接字符串序列 concat-连接字符串str1+str2+等


它的工作原理类似于两个循环,第一个循环是选择@part_id,第二个循环是选择并聚合依赖的@value

你测试过这个查询吗?。当我运行这个查询时,它返回的是null,这里的例子是。如果为空,请尝试使用xmlcast xmlqueryas VARCHAR2100T包装xmlquery。非常感谢。。我试图在同一列中显示以下数据:一次我需要用零件B显示不等于值,另一次我需要用零件A显示不等于值,必须显示以下输出。A=3,B=1 | | A=3,B不等于1 | | A不等于3,B=1在查询中可行吗?是的,必须添加谓词。
with src as (select xmltype('<Employee>
  <Emp_information emp_name="SSS">
  </Emp_information>
  <emp_content>
    <emp_part part_id="A" >
       <emp_scoring_information equivalent_value="Test" >
        <empset empset_weight="1">
          <emp_key value="1"/>
        </empset>
      </emp_scoring_information>
    </emp_part>
    <emp_part part_id="B" >
      <emp_scoring_information equivalent_value_flag="Test1" >
        <empset empset_weight="1" >
          <emp_key value="1"/>
          <emp_key value="2"/>
        </empset>
      </emp_scoring_information>
    </emp_part>
  </emp_content>
</Employee>') xml  from dual)
select xmlquery('string-join($d/Employee/emp_content/emp_part/concat(@part_id,"=",string-join(emp_scoring_information/empset/emp_key/@value,",") ),",")' passing xml as "d" returning content) from src