我有一个存储过程,它生成一行从Oracle SQL中的表的全部内容派生的XML数据:
PROCEDURE TABLE_TO_XML(
TABLE_IN IN VARCHAR2,
XML_TABLE IN VARCHAR2,
ROW_ID IN INTEGER,
ENCODING IN VARCHAR2,
HEADER_TAG IN VARCHAR2,
ROWS_TAG IN VARCHAR2,
ROW_TAG IN VARCHAR2,
XMLHEADING IN VARCHAR2,
XMLFULLHEADING IN VARCHAR2
)
IS
ctx DBMS_XMLQUERY.ctxHandle;
xml CLOB;
BEGIN
ctx := DBMS_XMLQUERY.NEWCONTEXT('SELECT * FROM '||TABLE_IN);
DBMS_XMLQUERY.SETENCODINGTAG(ctx , ENCODING);
DBMS_XMLQUERY.SETDATAHEADER(ctx, 'deletethisblankline', HEADER_TAG);
DBMS_XMLQUERY.SETROWSETTAG(ctx, ROWS_TAG);
DBMS_XMLQUERY.SETROWTAG(ctx, ROW_TAG);
DBMS_XMLQUERY.SETROWIDATTRNAME(ctx,null);
DBMS_XMLQUERY.USENULLATTRIBUTEINDICATOR(ctx,FALSE);
xml := DBMS_XMLQUERY.GETXML(ctx);
xml := REPLACE(xml,'deletethisblankline'||CHR(10),'');
xml := REPLACE(xml,'<'||XMLHEADING||'>','<'||XMLFULLHEADING||'>');
EXECUTE IMMEDIATE 'INSERT INTO '||XML_TABLE||' VALUES(:x,:y)' USING ROW_ID, SYS.XMLTYPE.CREATEXML(xml);
COMMIT;
DBMS_XMLQUERY.CLOSECONTEXT(ctx);
END TABLE_TO_XML;
此数据的源表非常庞大,因此我最终得到的XML文件太大而无法导入到其预定目标。有没有直接的方法我可以按特定行数拆分结果,并且对于每组记录生成一个完整的XML文件(包括所有特定的页眉和页脚),而不更改过程的调用方式?
Oracle中的大多数函数似乎都能够本地拆分,但我没有找到类似XML函数的东西。