본문 바로가기

[오라클 레퍼런스 함수] XMLTABLE - XQuery 결과를 관계형 테이블로 변환

by ㅇㅍㅍ 2023. 9. 7.
[오라클 레퍼런스 함수] XMLTABLE - XQuery 결과를 관계형 테이블로 변환
728x90

 

XMLTABLE

 

구문

XMLTABLE
 ( 
  [ XMLnamespaces_clause , ] XQuery_string XMLTABLE_options 
 )

 

XMLnamespaces_clause::=
XMLNAMESPACES
  ( { string AS identifier } | { DEFAULT string }
      [, { string AS identifier } | { DEFAULT string } ]...
  )

 

노트: DEFAULT string 절을 최대 한 번만 지정할 수 있습니다.

 

XMLTABLE_options::=
[ XML_passing_clause ]
[ RETURNING SEQUENCE BY REF ]
[ COLUMNS XML_table_column [, XML_table_column]...]

XML_passing_clause::=
PASSING [ BY VALUE ] 
    expr [ AS identifier ]
      [, expr [ AS identifier ] 
      ]...

XML_table_column::=
column
  { FOR ORDINALITY 
  | { datatype | XMLTYPE [ (SEQUENCE) BY REF ] }
    [ PATH string ] [ DEFAULT expr ]
  }

 

목적

XMLTable은 XQuery 평가 결과를 관계형 행과 열로 매핑합니다. SQL을 사용하여 함수가 반환하는 결과를 가상 관계형 테이블로 쿼리할 수 있습니다.

 

  • XMLNAMESPACES 절에는 XML 네임스페이스 선언 집합이 포함됩니다. 이러한 선언은 XQuery 식(평가된 XQuery_string)에 의해 참조되며, 전체 XMLTable 함수에 대한 열을 계산하는 XML_table_column의 PATH 절에서 XPath 식에 의해 계산됩니다. COLUMNS 절의 PATH 식에서 정규화된 이름을 사용하려면 XMLNAMESPACES 절을 지정해야 합니다.

  • XQuery_string은 리터럴 문자열입니다. 이는 완전한 XQuery 식이며 프롤로그 선언을 포함할 수 있습니다. XQuery_string의 값은 XMLTable 함수의 입력으로 작용하며, 이 XQuery 결과가 관계형 데이터로 분해되어 저장됩니다.

  • XML_passing_clauseexprXMLType 또는 SQL 스칼라 데이터 유형의 인스턴스를 반환하는 식입니다. PASSING 절에서 식을 하나만 지정할 수 있습니다. 각 식을 평가한 결과는 XQuery_string의 해당 식과 바인딩됩니다. AS 절을 따르지 않는 식은 해당 식의 결과가 XQuery_string을 평가하기 위한 컨텍스트 항목으로 사용됩니다. 이 절은 값으로 전달만 지원하며 참조로 전달을 지원하지 않습니다. 따라서 BY VALUE 키워드는 선택적이며 의미적으로 명확하게 제공됩니다.

  • RETURNING SEQUENCE BY REF 절은 XQuery 평가 결과를 참조로 반환하도록 지정합니다. 이를 통해 XML_table_column 절에서 소스 데이터의 일부를 참조할 수 있습니다.

    이 절을 생략하면 XQuery 평가 결과가 값으로 반환됩니다. 즉, 대상 노드의 사본이 반환되며 실제 노드에 대한 참조가 아닙니다. 이 경우 XML_table_column 절에서 반환된 사본에 포함되지 않은 데이터에 대한 참조를 할 수 없습니다. 특히 소스 데이터에서 대상 노드 이전의 데이터에 대한 참조는 할 수 없습니다.

  • 선택적인 COLUMNS 절은 XMLTable에서 생성할 가상 테이블의 열을 정의합니다.

    º COLUMNS 절을 생략하면 XMLTableCOLUMN_VALUE라는 단일 XMLType 의사열을 가진 행을 반환합니다.

    º FOR ORDINALITYcolumn이 생성된 행 번호의 열로 지정되어야 함을 나타냅니다. FOR ORDINALITY 절은 최대 하나만 있어야 합니다. NUMBER 열로 생성됩니다.

    º FOR ORDINALITY 열을 제외한 각 결과 열에 대해 열 데이터 유형을 지정해야 합니다. XMLType 또는 다른 데이터 유형이 될 수 있습니다.

    열 데이터 유형이 XMLType인 경우 XMLTYPE clause을 지정해야 합니다. 선택적인 (SEQUENCE) BY REF 절을 지정하는 경우 PATH 식이 대상 데이터의 참조로 반환됩니다. 그렇지 않으면 column에 해당 대상 데이터의 사본이 포함됩니다.

    XMLType 데이터를 참조로 반환하면 PATH 식에 의해 대상 데이터가 아닌 소스 데이터의 노드를 대상으로 하는 다른 열을 지정할 수 있습니다.

    열 데이터 유형이 다른 데이터 유형인 경우 datatype을 지정해야 합니다.

    º 선택적인 PATH 절은 XQuery 결과의 일부가 열 내용으로 사용되어야 함을 지정합니다.

    PATH를 생략하면 XQuery expression column로 간주됩니다. 예를 들어:
    XMLTable(... COLUMNS xyz)

    은 다음과 동등합니다.
    XMLTable(... COLUMNS xyz PATH 'XYZ')

    다른 PATH 절을 사용하여 XQuery 결과를 다른 가상 테이블 열로 분할할 수 있습니다.

    선택적인 DEFAULT 절은 PATH 식의 결과가 빈 시퀀스인 경우 사용할 값을 지정합니다. expr은 기본값을 생성하기 위해 평가되는 XQuery 식입니다.

 

 

참고:

  • XMLTable 함수에 대한 자세한 정보와 추가적인 예제, 그리고 일반적인 XQuery 정보는 Oracle XML DB Developer's Guide를 참조하십시오.
  • Oracle Database Globalization Support Guide의 부록 C는 XMLTABLE로 생성된 테이블의 각 문자 데이터 유형 열에 할당된 정렬 파생 규칙(collation derivation rules)에 대한 정보를 제공합니다.

 

예제

다음 예제는 warehouses 테이블의 warehouse_spec 열 각 값에 XQuery '/Warehouse'를 적용한 결과를, WaterRail 열로 가진 가상 관계형 테이블로 변환합니다.

SELECT warehouse_name warehouse,
   warehouse2."Water", warehouse2."Rail"
   FROM warehouses,
   XMLTABLE('/Warehouse'
      PASSING warehouses.warehouse_spec
      COLUMNS 
         "Water" varchar2(6) PATH 'WaterAccess',
         "Rail" varchar2(6) PATH 'RailAccess') 
      warehouse2;

WAREHOUSE                           Water  Rail
----------------------------------- ------ ------
Southlake, Texas                    Y      N
San Francisco                       Y      N
New Jersey                          N      N
Seattle, Washington                 N      Y

 


출처: 오라클 레퍼런스

원문 링크: Oracle XMLTABLE 함수 문서

 

반응형

댓글