2014-11-11 1 views
2

에 나는이 같은 XML 출력을 찾고 있는데요 : 제가 위에서 언급 한 바와 같이 동일한 형식을 얻기 위해 고군분투XML 형식은 오라클

<EmployeeCounts> 
    <Count DESIGNATION="CLERK">200</Count> 
    <Count DESIGNATION="MANAGER">1</Count> 
    <Count DESIGNATION="PROFESSOR">4</Count> 
</EmployeeCounts> 

.

ORA-19208: parameter 2 of function XMLELEMENT must be aliased 19208. 
00000 - "parameter %s of function %s must be aliased" 
*Cause: The indicated parameter of the XML generation function has not 
been aliased, although it is an expression. *Action: Specify an alias 
for the expression using the AS clause. 
Error at Line: 6 Column: 14 

하지만 형식에 따라, 카운트 별칭을 원하지 않는다 :

내가이 쿼리를 사용하지만

SELECT XMLELEMENT ("EmployeeCounts" 
    ,XMLELEMENT("COUNT", 
    XMLATTRIBUTES (e.DESIGNATION as "DESIGNATION", count(*)) 
       ) 
    ) AS "emp" 
    FROM employees e 
    GROUP BY e.DESIGNATION ; 

을 erroring입니다

내가 갖는 오류입니다 위에 언급했듯이.

이 문제에 대한 도움을 주시면 감사하겠습니다.

+0

어떤 오류가 발생합니까? 질문에 오류를 추가하십시오. – Dijkgraaf

+0

질문에 오류를 추가했습니다. – Tina

답변

1

Dijkgraaf의 솔루션은 오류를 해결하지만 원하는 XML 형식을 출력하지 않습니다. XMLATTRIBUTES 함수에서 COUNT를 제거하고 XMLAGG를 사용하여 EmployeeCounts 태그 집합을 얻을 수 있도록 다음을 시도해보십시오.

SELECT 
    XMLELEMENT("EmployeeCounts" 
     , XMLAGG(
      XMLELEMENT("Count" 
       , XMLATTRIBUTES(e.designation AS "DESIGNATION") 
       , COUNT(1) 
      ) 
     ) 
    ) 
FROM 
    employees e 
GROUP BY 
    e.designation; 
+0

그 출력은 어떻게 생겼습니까? – Dijkgraaf

+1

@Dijkgraaf [Here 's] (http://sqlfiddle.com/#!4/9dbd37/1) SQLFiddle은 두 가지를 비교합니다. –

+0

감사합니다. @ShawnMire, 코드가 작동 중입니다! – Tina

0

별칭을 지정하지 않는 것에 대한 선택의 여지가 없습니다.

SELECT XMLELEMENT ("EmployeeCounts" 
,XMLELEMENT("COUNT", 
XMLATTRIBUTES (e.DESIGNATION as "DESIGNATION", count(*) as DESCOUNT) 
      ) 
) AS "emp" 
FROM employees e 
GROUP BY e.DESIGNATION ; 

당신은 가끔 문제가 될 수 예약어에 다음,하지만 앨리어싱 일을 시도 할 수 있습니다. 직원 FROM

SELECT XMLELEMENT ("EmployeeCounts" 
,XMLELEMENT("COUNT", 
XMLATTRIBUTES (e.DESIGNATION as "DESIGNATION", count(*) as Count) 
       ) 
) AS "emp" 

는 e.DESIGNATION에 의해 ​​ 그룹을 전자;