반응형
oracle plsql: XML을 구문 분석하고 테이블에 삽입하는 방법
중첩된 xml 파일을 데이터베이스 테이블에 로드하는 방법은 무엇입니까?
<?xml version="1.0" ?>
<person>
<row>
<name>Tom</name>
<Address>
<State>California</State>
<City>Los angeles</City>
</Address>
</row>
<row>
<name>Jim</name>
<Address>
<State>California</State>
<City>Los angeles</City>
</Address>
</row>
</person>
이 xml에서 person은 테이블 이름, name은 파일 이름, Tom은 파일 값입니다.주소는 하위 테이블이고 주 및 시는 주소 내부의 두 열입니다.사용자 행을 사용자 테이블에 삽입하고, 실패한 경우 주소 테이블에 삽입하지 않습니다.이 xml은 매우 클 수 있습니다.이를 위한 가장 좋은 해결책은 무엇입니까?
XML 문서를 XML 유형에 로드한 다음 쿼리할 수 있습니다. 예:
DECLARE
x XMLType := XMLType(
'<?xml version="1.0" ?>
<person>
<row>
<name>Tom</name>
<Address>
<State>California</State>
<City>Los angeles</City>
</Address>
</row>
<row>
<name>Jim</name>
<Address>
<State>California</State>
<City>Los angeles</City>
</Address>
</row>
</person>');
BEGIN
FOR r IN (
SELECT ExtractValue(Value(p),'/row/name/text()') as name
,ExtractValue(Value(p),'/row/Address/State/text()') as state
,ExtractValue(Value(p),'/row/Address/City/text()') as city
FROM TABLE(XMLSequence(Extract(x,'/person/row'))) p
) LOOP
-- do whatever you want with r.name, r.state, r.city
END LOOP;
END;
select *
FROM XMLTABLE('/person/row'
PASSING
xmltype('
<person>
<row>
<name>Tom</name>
<Address>
<State>California</State>
<City>Los angeles</City>
</Address>
</row>
<row>
<name>Jim</name>
<Address>
<State>California</State>
<City>Los angeles</City>
</Address>
</row>
</person>
')
COLUMNS
--describe columns and path to them:
name varchar2(20) PATH './name',
state varchar2(20) PATH './Address/State',
city varchar2(20) PATH './Address/City'
) xmlt
;
CREATE OR REPLACE PROCEDURE ADDEMP
(xml IN CLOB)
AS
BEGIN
INSERT INTO EMPLOYEE (EMPID,EMPNAME,EMPDETAIL,CREATEDBY,CREATED)
SELECT
ExtractValue(column_value,'/ROOT/EMPID') AS EMPID
,ExtractValue(column_value,'/ROOT/EMPNAME') AS EMPNAME
,ExtractValue(column_value,'/ROOT/EMPDETAIL') AS EMPDETAIL
,ExtractValue(column_value,'/ROOT/CREATEDBY') AS CREATEDBY
,ExtractValue(column_value,'/ROOT/CREATEDDATE') AS CREATEDDATE
FROM TABLE(XMLSequence( XMLType(xml))) XMLDUMMAY;
COMMIT;
END;
언급URL : https://stackoverflow.com/questions/12982687/oracle-plsql-how-to-parse-xml-and-insert-into-table
반응형
'programing' 카테고리의 다른 글
생략을 사용하여 여러 속성을 succint 방식으로 생략하는 방법<> (0) | 2023.06.25 |
---|---|
Oracle 등록에 문제가 있습니다.MS SQL Server 2012의 SQLCLR 어셈블리로 데이터 액세스 (0) | 2023.06.25 |
C# mongodb driver 2.0 - 대량 작업에서 어떻게 뒤집습니까? (0) | 2023.06.25 |
문자열 배열 초기화 (0) | 2023.06.25 |
SQLALCHEMY_TRACK_MODIES를 사용하지 않도록 설정할 수 있는지 어떻게 알 수 있습니까? (0) | 2023.06.25 |