Oracle PLSQL을 사용하여 XMLType 유형의 여러 XML 조각을 생성 한 지점에 도달했습니다. 나는 이것들을 XMLTYPE 타입의 VARRAY에 저장했다. 이 파일을 개별적으로 파일에 성공적으로 인쇄 할 수 있습니다.XML 형식의 VARAY를 연결하는 좋은 방법은 무엇입니까
다음에 내가하고 싶은 것은 이러한 모든 조각들을 함께 융합시켜 하나의 문서를 생성하기 위해 다른 루트 요소로 감싸는 것입니다. 내가 XMLSEQUENCETYPE을 잡을 수 있다면 읽은 것부터 XMLCONCAT (..)로 넘겨 줄 수 있으며 모든 파편의 XMLType 연결을 반환해야합니다. 이 후 XMLELEMENT (..)를 사용하여 루트 요소를 추가하는 경우 일 수 있습니다. 그러나 XMLTYPE의 VARRAY에서 XMLSEQUENCETYPE을 생성하는 방법을 찾는 데 어려움이 있습니다.
이 작업을 수행하는 방법을 알고 있으며 사실 내가 취한 접근 방식이 최선인지 여부를 아는 사람이 있습니까? (누군가 궁금하다면 기본 dbunit 형식의 프레임 워크를 만들려고합니다.이 스크립트의 목적은 XML 데이터 집합을 파일로 출력하는 데 사용할 수있는 도구를 만드는 것입니다. 나중에이 파일을 단위 테스트에로드합니다.
set serveroutput on;
CREATE OR REPLACE TYPE rowset_query_type AS OBJECT (
table_name VARCHAR2(100),
query_string VARCHAR2(1024)
);
/
DECLARE
TYPE XML_Fragments_Type IS VARRAY(1000) OF XMLTYPE;
TYPE Rowset_Query_List_Type is VARRAY(1000) OF rowset_query_type;
outputDir VARCHAR(200) := 'ORACLE_FILE_DIR';
outputFile VARCHAR(200) := 'TestDataSet.xml';
qryCtx DBMS_XMLGEN.ctxHandle;
rowsetResultFragments XML_Fragments_Type;
rowsetQueries Rowset_Query_List_Type;
xmlResult xmltype;
rowsetQueryElement rowset_query_type;
output CLOB;
BEGIN
dbms_output.put_line('Exporting dataset...');
-- export files to data fixture
-- define fixtures
rowsetQueries := Rowset_Query_List_Type();
rowsetQueries.EXTEND(2);
rowsetQueries := Rowset_Query_List_Type(
rowset_query_type('person', 'select * from person'),
rowset_query_type('address','select * from address'));
rowsetResultFragments := XML_Fragments_Type();
rowsetResultFragments.EXTEND(rowsetQueries.count);
FOR i IN rowsetQueries.FIRST..rowsetQueries.LAST
LOOP
rowsetQueryElement := rowsetQueries(i);
dbms_output.put_line('Extracting dataset for table: ' || rowsetQueryElement.table_name || ' using query: ''' || rowsetQueryElement.query_string || '''');
qryCtx := dbms_xmlgen.newContext(rowsetQueryElement.query_string);
-- wrap the result up with a metadata tag containing the fixture tablename
select xmlelement(
"ROWSET_QUERY",
xmlattributes(rowsetQueryElement.table_name as "tableName"),
DBMS_XMLGEN.getXMLType(qryCtx)
)
into rowsetResultFragments(i)
from dual;
--close context
DBMS_XMLGEN.closeContext(qryCtx);
-- print the results to console
-- serialize the result for printing to output
SELECT XMLSERIALIZE(
CONTENT
rowsetResultFragments(i)
AS CLOB)
INTO output
FROM DUAL;
DBMS_OUTPUT.PUT_LINE(output);
END LOOP;
-- concatenate the set of rowsetQueries result fragments to a single result clob
-- ???
END;
/
감사합니다. – Ellis