循环Oracle SQL过程中的记录组

时间:2014-10-16 00:03:18

标签: xml oracle stored-procedures

我有一个存储过程,它生成一行从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函数的东西。

0 个答案:

没有答案