暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 多个表的XMLForest

askTom 2018-06-27
462

问题描述

大家好

我试图从2个表与XML函数进行查询,但我有一些问题:

这是我在这个示例中使用的sql

从我正在使用的2个不同的表中选择

select deptno,dname from dept;
select empno,ename,deptno from emp;


然后我去做xml
SELECT XMLElement("Department",
                  dept_t(deptno,
                         edept,
                         cast(MULTISET
                              (SELECT empno, ename
                                 FROM emp e
                                 WHERE e.deptno = e.deptno)
                              AS emplist_t)))
  AS deptxml
  FROM dept d
  WHERE d.deptno = 10;


我有一个结果

ORA-00902: tipo di dati non valido
00902. 00000-“无效数据类型”
* 原因:
* 行动:
里加: 11,科隆纳: 34


除了这个错误,这是我试图检索的xml


  
    ACCOUNTING
    
      
        CLARK
      
      
        KING
      
      
        MILLER
      
    
  
  
    ACCOUNTING2
    
      
        CLARK2
      
      
        KING2
      
      
        MILLER2
      
    
  





但这是从多个选择中制作树xml的唯一方法?

谢谢
毛罗


专家解答

我不确定为什么需要子查询?您可以将两个表连接在一起并以这种方式生成XML。

按将在部门级别出现的列分组,并将员工信息一起XMLAgg:

set long 10000
with depts as (
  select xmlelement (
           "dept_t", xmlattributes (d.deptno),
           xmlelement ( 
             "emplist", xmlagg ( 
               xmlelement (
                 "emp_t", xmlattributes (e.empno),
                 xmlelement ( "ename", e.ename )
               )
             ) 
           )
         ) dept
  from   scott.dept d
  join   scott.emp e
  on     e.deptno = d.deptno
  where  d.deptno in (10, 20)
  group  by d.deptno
)
  select xmlserialize ( --for formatting the output
           content xmlelement (
             "department",
             xmlagg ( dept )
           ) as varchar2(1000)
           indent size = 2
         ) doc
  from   depts;

DOC                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
------------------------------------

  
    
      
        CLARK
      
      
        MILLER
      
      
        KING
      
    
  
  
    
      
        SMITH
      
      
        FORD
      
      
        ADAMS
      
      
        SCOTT
      
      
        JONES
      
    
  

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论