Computer >> 컴퓨터 >  >> 프로그램 작성 >> 데이터 베이스

PL/SQL에서 XML 구문 분석

이 블로그에서는 Oracle® PL/SQL에서 XML 데이터를 처리하는 몇 가지 방법을 살펴봅니다. 데이터베이스 서비스에 대해 자세히 알아보십시오.

XML 파일의 XML 데이터를 Oracle PL/SQL 행 및 열로 변환하려는 경우 다음 옵션을 사용할 수 있습니다.

  • XML 파일을 XML 테이블에 로드한 다음 구문 분석합니다.
  • XML 테이블에 로드하지 않고 XML 파일을 직접 구문 분석합니다.

XML 데이터를 Oracle 테이블에 로드하려면 SQLLOADER와 같은 옵션을 사용하십시오. ,utl_file 또는 XML CLOB . 데이터를 테이블에 로드한 후 각 XML 태그에서 값을 추출해야 합니다. XML 데이터를 추출하려면 XMLELEMENT와 같이 Oracle에서 제공하는 내장 함수를 사용하십시오. , XMLAGG , XMLTABLE ,XMLSEQUENCEEXTRACTVALUE .

사용되는 주요 내장 함수는 EXTRACT입니다. , 다음 이미지에 표시됨:

PL/SQL에서 XML 구문 분석

이미지 소스 :https://docs.oracle.com/cd/B19306_01/server.102/b14200/img/extract_xml.gif

예제 파일

이러한 옵션을 자세히 살펴보기 위해 이 게시물의 예는 Test.xml 파일을 사용합니다. . 데이터베이스의 파일에 액세스하려면 DBA를 사용하세요. Oracle에 정의된 디렉토리입니다. 예는 XX_UTL_DIR을 사용합니다. 참조 디렉토리로. 대신 원하는 디렉토리를 사용할 수 있습니다.

Test.xml 다음 내용이 있습니다:

<?xml version = '1.0' encoding = 'UTF-8'?>
<UANotification xmlns="https://www.test.com/UANotification">
    <NotificationHeader>
    <Property name="ErrorMessage" value="User Data Invalid"/>
            <Property name="SPSDocumentKey" value="11111111111"/>
            <Property name="AppKey" value="22222222"/>
            <Property name="FileName" value="SH201701181418.61W"/>
            <Property name="SenderName" value="Test"/>
            <Property name="ReceiverName" value="Integrated Supply Network"/>
            <Property name="DocumentType" value="856"/>
            <Property name="SourceDataType" value="XML"/>
            <Property name="DestinationDataType" value="FEDS"/>
            <Property name="XtencilNet" value="shFedsWrite"/>
            <Property name="PreviousMaps" value="shFedsWrite]"/>
    </NotificationHeader>
    <FINotification xmlns="https://www.test.com/fileIntegration">
            <ServiceResult>
                    <DataError>
                            <Message>Invalid data test 1</Message>
                    </DataError>
                    <DataError>
                            <Message>Invalid data test 2</Message>
                    </DataError>
            </ServiceResult>
    </FINotification>
</UANotification>

첫 번째 접근:XML 파일을 XML 테이블에 로드한 다음 구문 분석

먼저, 데이터 유형이 XMLTYPE인 열을 포함하는 Oracle에서 테이블을 만듭니다. .

예를 들어 다음 코드를 사용하여 테이블을 만듭니다.

CREATE TABLE xml_tab (
  File_name  varchar2(100),
  xml_data  XMLTYPE
);

다음으로 Test.xml의 데이터를 삽입합니다. xml.tab으로 다음 명령을 사용하여:.

INSERT INTO xml_tab
VALUES ( ‘Test.xml’,
XMLTYPE (BFILENAME ('XX_UTL_DIR', ‘Test.xml’),
NLS_CHARSET_ID ('AL32UTF8')
));

앞의 INSERT 문은 Test.xml 파일의 데이터를 삽입합니다. xml_data 필드에 xml_tab 테이블의 . INSERT가 완료되면 xml_tab 테이블에서 XML 데이터를 사용할 수 있습니다. . SELECT 쿼리의 데이터를 읽으려면 다음에 설명된 SELECT 문을 사용하십시오.

Message 태그의 텍스트를 읽으려면 상위 태그DataError 아래에서 사용할 수 있습니다. , 다음 SQL 명령을 사용하십시오.

SELECT EXTRACT (VALUE (a1),
            '/DataError/Message/text()',
            'xmlns="https://www.test.com/fileIntegration')
      msg
 FROM xml_tab,
   TABLE (
      XMLSEQUENCE (
         EXTRACT (
            xml_data,
            '/UANotification/ns2:FINotification/ns2:ServiceResult/ns2:DataError',
            'xmlns="https://www.test.com/UANotification" xmlns:ns2="https://www.test.com/fileIntegration"'))) a1
WHERE file_name = 'Test.xml';

property name을 읽으려면 및 해당 값을 보려면 다음 SQL 명령을 사용하십시오.

SELECT EXTRACTVALUE (VALUE (a1),
                 '/Property/@name',
                 'xmlns="https://www.test.com/UANotification')
      attribute,
   EXTRACTVALUE (VALUE (a1),
                 '/Property/@value',
                 'xmlns="https://www.test.com/UANotification')
      VALUE
 FROM xml_tab,
   TABLE (
      XMLSEQUENCE (
         EXTRACT (
            xml_data,
            '/UANotification/NotificationHeader/Property',
            'xmlns="https://www.test.com/UANotification" xmlns:ns2="https://www.test.com/fileIntegration"'))) a1
 WHERE file_name = 'Test.xml';

두 번째 접근 방식:XML 파일을 XML 테이블에 로드하지 않고 직접 구문 분석

Test.xml을 직접 파싱하려면 Oracletable에 로드하지 않고 다음 SELECT 문을 사용할 수 있습니다.

SELECT EXTRACTvalue (VALUE (a1),
            '/Property/@name',
            'xmlns="https://www.test.com/UANotification') attribute,
             EXTRACTvalue (VALUE (a1),
            '/Property/@value',
            'xmlns="https://www.test.com/UANotification') value
 FROM
   TABLE (
      XMLSEQUENCE (
         EXTRACT (
            xmltype(BFILENAME ('XX_UTL_DIR', 'Test.xml'),NLS_CHARSET_ID ('AL32UTF8')),
            '/UANotification/NotificationHeader/Property',
            'xmlns="https://www.test.com/UANotification" xmlns:ns2="https://www.test.com/fileIntegration"'))) a1

마무리

이 게시물에 설명된 XML 데이터를 구문 분석하는 두 가지 방법 모두 동일한 최종 출력을 제공합니다. 첫 번째 접근 방식은 다음과 같은 코드가 필요한 3단계 프로세스입니다.

  1. Oracle 테이블을 생성합니다.
  2. 생성된 테이블에 XML 파일의 데이터를 삽입합니다.
  3. SELECT 문을 작성하여 테이블에서 값을 추출합니다.

두 번째 옵션은 SELECT 문을 작성하여 원하는 결과를 얻는 단일 단계 프로세스입니다.

결론

두 옵션 모두 작동하지만 XML 파일을 Oracle 향후 참조에 저장해야 하는 경우 데이터가 향후 참조를 위해 테이블에 유지되고 언제든지 액세스할 수 있으므로 첫 번째 방법을 사용해야 합니다.

두 번째 접근 방식을 선택하면 데이터를 직접 구문 분석할 수 있습니다. 그러나 이 옵션을 사용하면 이 옵션이 XML 파일의 내용을 Oracle에 저장하지 않기 때문에 나중에 원본 XML 파일 데이터에 액세스할 수 없습니다.

피드백 탭을 사용하여 의견을 남기거나 질문하십시오.

전문가 관리, 관리 및 구성으로 환경 최적화

Rackspace의 애플리케이션 서비스(RAS) 전문가는 광범위한 애플리케이션 포트폴리오에서 다음과 같은 전문적이고 관리되는 서비스를 제공합니다.

  • 전자상거래 및 디지털 경험 플랫폼
  • 전사적 자원 관리(ERP)
  • 비즈니스 인텔리전스
  • Salesforce CRM(고객 관계 관리)
  • 데이터베이스
  • 이메일 호스팅 및 생산성

우리는 다음을 제공합니다:

  • 편향 없는 전문성 :즉각적인 가치를 제공하는 기능에 중점을 두고 현대화 여정을 간소화하고 안내합니다.
  • 광신적인 경험™ :먼저 Process를 결합합니다. 기술 두 번째.®전담 기술 지원을 통해 포괄적인 솔루션을 제공하는 접근 방식.
  • 타의 추종을 불허하는 포트폴리오 :광범위한 클라우드 경험을 적용하여 올바른 클라우드에서 올바른 기술을 선택하고 배포할 수 있도록 지원합니다.
  • 민첩한 전달 :귀하의 여정에서 귀하를 만나고 귀하의 성공에 맞춰 귀하의 성공을 맞춥니다.

시작하려면 지금 채팅하세요.