이 블로그에서는 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
,XMLSEQUENCE
및 EXTRACTVALUE
.
사용되는 주요 내장 함수는 EXTRACT
입니다. , 다음 이미지에 표시됨:
이미지 소스 :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단계 프로세스입니다.
- Oracle 테이블을 생성합니다.
- 생성된 테이블에 XML 파일의 데이터를 삽입합니다.
- SELECT 문을 작성하여 테이블에서 값을 추출합니다.
두 번째 옵션은 SELECT 문을 작성하여 원하는 결과를 얻는 단일 단계 프로세스입니다.
결론
두 옵션 모두 작동하지만 XML 파일을 Oracle 향후 참조에 저장해야 하는 경우 데이터가 향후 참조를 위해 테이블에 유지되고 언제든지 액세스할 수 있으므로 첫 번째 방법을 사용해야 합니다.
두 번째 접근 방식을 선택하면 데이터를 직접 구문 분석할 수 있습니다. 그러나 이 옵션을 사용하면 이 옵션이 XML 파일의 내용을 Oracle에 저장하지 않기 때문에 나중에 원본 XML 파일 데이터에 액세스할 수 없습니다.
피드백 탭을 사용하여 의견을 남기거나 질문하십시오.
전문가 관리, 관리 및 구성으로 환경 최적화
Rackspace의 애플리케이션 서비스(RAS) 전문가는 광범위한 애플리케이션 포트폴리오에서 다음과 같은 전문적이고 관리되는 서비스를 제공합니다.
- 전자상거래 및 디지털 경험 플랫폼
- 전사적 자원 관리(ERP)
- 비즈니스 인텔리전스
- Salesforce CRM(고객 관계 관리)
- 데이터베이스
- 이메일 호스팅 및 생산성
우리는 다음을 제공합니다:
- 편향 없는 전문성 :즉각적인 가치를 제공하는 기능에 중점을 두고 현대화 여정을 간소화하고 안내합니다.
- 광신적인 경험™ :먼저 Process를 결합합니다. 기술 두 번째.®전담 기술 지원을 통해 포괄적인 솔루션을 제공하는 접근 방식.
- 타의 추종을 불허하는 포트폴리오 :광범위한 클라우드 경험을 적용하여 올바른 클라우드에서 올바른 기술을 선택하고 배포할 수 있도록 지원합니다.
- 민첩한 전달 :귀하의 여정에서 귀하를 만나고 귀하의 성공에 맞춰 귀하의 성공을 맞춥니다.
시작하려면 지금 채팅하세요.