2017-11-16 6 views
1

저는 sum과 count 이상의 파티션과 같은 분석 함수를 사용하여 oracle 테이블에서 XML을 생성하려고합니다.XMLElement의 오라클 분석 함수

SELECT XMLElement("DEPARTMENT", 
      XMLAttributes((sum(amount) OVER (PARTITION BY deptid)) AS dept_sum, 
          (count(*) OVER (PARTITION BY deptid)) AS dept_count), 
       XMLAgg(
        XMLElement("EMPLOYEE", 
         XMLConcat(XMLElement("EMP_SALARY", a.emp_salary), 
            XMLElement("EMP_ADDRESS", a.emp_address)) 
        ) 
       ) 
     ) 
    AS "EMP_XML" 
FROM EMPLOYEES 

이 합을 통해 오류가 아래의 출력

EMP_XML 
------------------------------------------- 
<DEPARTMENT dept_sum=150, dept_count=2> 
    <EMPLOYEE> 
     <EMP_SALARY>100</EMP_SALARY> 
     <EMP_ADDRESS>Mumbai</EMP_ADDRESS> 
    </EMPLOYEE> 
    <EMPLOYEE> 
     <EMP_SALARY>50</EMP_SALARY> 
     <EMP_ADDRESS>Hyderabad</EMP_ADDRESS> 
    </EMPLOYEE> 
</DEPARTMENT> 

있어 및 계산 기능을 다음과 기대 : 다음 쿼리를 사용

ORA-00937: not a single-group group function 

어떻게들은 XMLElement 함수에서 분석 기능을 사용합니까? 당신은 별칭 a을 사용하는

하지만 당신은 그것을 정의되지 않는다 :

SELECT XMLElement("DEPARTMENT", 
      XMLAttributes(sum(emp_salary) AS dept_sum, 
          count(1) AS dept_count), 
       XMLAgg(
        XMLElement("EMPLOYEE", 
         XMLConcat(XMLElement("EMP_SALARY", emp_salary), 
            XMLElement("EMP_ADDRESS", emp_address)) 
        ) 
       ) 
     ) 
    AS "EMP_XML" 
FROM EMPLOYEES 
Group by deptid; 

답변

0

이보십시오. 하나의 테이블에서만 선택하므로 테이블 별명은 필요하지 않습니다. a.emp_salary 대신 emp_salary을 쓰면됩니다. 그러나 어쨌든 별칭 사용을 고집하는 이유가 있다면 일부 열뿐만 아니라 모든 열 이름에 사용해야합니다.

amount의 금액을 합한 금액이 emp_salary일까요?

XMLATTRIBUTES 절에 부서 번호도 표시 할 필요가 없습니까?

그런 다음 질문에 대답하십시오. 올바른 문서 구조를 얻기 위해 XMLAGG를 사용하고 있습니다. 하지만 집합체 함수입니다. GROUP BY 절이 필요합니다. (물론, group by deptid).

그런 다음 XMLATTRIBUTES에는 집계 기능이 있습니다. 그 곳에서 sum(emp_salary)count(*)이 필요합니다. XML 문서에서 각 행에 합계 (급여)와 수 (행)를 저장하려면 분석 함수가 필요합니다 (일반 분석 함수와 마찬가지로!) 그것은 당신이하는 것이 아닙니다. XMLATTRIBUTES에서 분석 함수가 아닌 집계를 사용해야합니다.

0

먼저의 조회에서 몇 가지 다른 일을 해결하자