1

我已经创建了一个存储过程,用于根据给定的输入参数“Table_Name”生成 XML 文件。

存储过程是:

create or replace 
PROCEDURE Export_In_XML11JUNE 
(
   V_TABLE_NAME1 IN varchar2,
   v_FLAG OUT NUMBER
  )
AS
BEGIN
             ----- Export  table data
          DECLARE
            v_file  UTL_FILE.file_type;
            qryCtx DBMS_XMLGEN.ctxHandle;
            result CLOB;
            v_FILENAME varchar2(50);
            xt_data xmltype;
            v_ctx dbms_xmlgen.ctxHandle;
            rc_data sys_refcursor;
            V_TABLE_NAME varchar2(50);
            cnt number :=0;

     BEGIN 
                     V_TABLE_NAME :=trim(UPPER(V_TABLE_NAME1));          
                           v_file := UTL_FILE.fopen('MYXML',V_TABLE_NAME ||'.xml', 'W');

                              OPEN rc_data FOR 
                              'select * FROM '||V_TABLE_NAME||' ORDER BY 1' ;
                                v_ctx := dbms_xmlgen.newContext (rc_data);
                            DBMS_XMLGEN.USEITEMTAGSFORCOLL (v_ctx);

                                  DBMS_XMLGEN.SETNULLHANDLING(v_ctx, 1);
                                   DBMS_XMLGEN.setrowsettag(v_ctx,'root'); 
                                   DBMS_XMLGEN.setrowtag(v_ctx,V_TABLE_NAME );
                                   result:=  DBMS_XMLGEN.getXML(v_ctx);
                                   result := REPLACE( result, '<?xml version="1.0"?>','<?xml version="1.0" encoding="UTF-8" standalone ="yes"?>');
                                   -- DBMS_XMLGEN.RESTARTQUERY (v_ctx);   
                                 --  xt_data := dbms_xmlgen.getXMLType (v_ctx);

                                   dbms_xslprocessor.clob2file( result, 'MYXML', ''||V_TABLE_NAME||'.xml',871);
                                    dbms_xmlgen.closeContext (v_ctx);
                                    v_FLAG := 1;

                            EXCEPTION
                            WHEN OTHERS THEN
                                 DBMS_OUTPUT.PUT_LINE(SQLERRM);
                                 dbms_xmlgen.closeContext (v_ctx);
                                 v_FLAG := 0;


                          END ;

END Export_In_XML11JUNE;

它以这种格式返回 XML:

<?xml version="1.0" encoding="UTF-8" standalone ="yes"?>
<root xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance">
 <AGNCY>
  <AGENCYID>0000</AGENCYID>
  <NAME>ABC</NAME>
  <MARKDELETED>0</MARKDELETED>
 </AGNCY>
 <AGNCY>
....
....

我需要的 XML 输出是

<?xml version="1.0" encoding="UTF-8" standalone ="yes"?>
<root xsi:noNamespaceSchemaLocation="c:\data\Agency.xsd" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance">
 <AGNCY>
  <AGENCYID>0000</AGENCYID>
  <NAME>Caltrans</NAME>
  <MARKDELETED>0</MARKDELETED>
 </AGNCY>
 <AGNCY>
....
....
....

我想要根标记中的 xsi:noNamespaceSchemaLocation="c:\data\table_Name.xsd" 行。

table_Name是存储过程的输入参数。

我已经尝试过但没有找到任何解决方案。请指导我。

4

0 回答 0