在oracle中通过字段信息生成xml文件

来源:互联网 发布:人类起源于非洲 知乎 编辑:程序博客网 时间:2024/05/18 13:27

       一般地,在开发xmlp的时候,我们要先用report builder制作rdf模板,然后上传rdf到客户化应用下的reports文件夹下,通过并发请求,输出xml数据,然后保存成xml文件,或者直接将请求输出的out文件改后缀为xml,同样得到输出数据的xml文件,接着通过加载xml数据制作rtf模拟,定义数据和模板,再次处理并发请求,以求得到我们想要输出格式的报表。(其中的详细过程就不再啰嗦了,想必都已经很熟了)

      但是如果我们的开发环境中没办法上传rdf模板的时候,我们就要用其他的办法输出得到xml文件了,这里是介绍了一种使用plsql通过字段信息生成xml文件的方法:

     dbms_xmlgen这个程序包是关键,有兴趣的可以去了解下,它可以根据一个游标输出一个CLOB格式的XML文本,下面是参考程序:
PROCEDURE xml_print(errbuf  OUT VARCHAR2,
                    retcode OUT NUMBER) IS
  ctx      dbms_xmlgen.ctxhandle;
  c_result CLOB;
  xmltext  VARCHAR2(5000);
  v_source ref_cursor;
  line     VARCHAR2(200);
  TYPE     ref_cursor IS REF CURSOR;
BEGIN
  --定义数据,数据集必须为游标变量
  OPEN v_source FOR
    SELECT 1,
           2,
           CURSOR (SELECT 3,
                          4
                     FROM dual
                    WHERE 1 = 1
                   UNION ALL
                   SELECT 5,
                          6
                     FROM dual
                    WHERE 1 = 1)
      FROM dual
     WHERE 1 = 1;

  --定义XML CLOB文件
  ctx := dbms_xmlgen.newcontext(v_source);
  --设置XML文件标签
  dbms_xmlgen.setrowsettag(ctx,
                           'HEADER');
  dbms_xmlgen.setrowtag(ctx,
                        'LINE');
  -- generate the CLOB as a result.
  c_result := dbms_xmlgen.getxml(ctx);
 /* --直接输出clob
  dbms_output.put_line(c_result);*/
  --以文本形式输出XML文件
  xmltext := substr(c_result);
  LOOP
    EXIT WHEN xmltext IS NULL;
    line := substr(xmltext,
                   1,
                   instr(xmltext,
                         chr(10)) - 1);
    fnd_file.put(fnd_file.output,
                 line);
    xmltext := substr(xmltext,
                      instr(xmltext,
                            chr(10)) + 1);
  END LOOP;
  dbms_xmlgen.closecontext(ctx);
  CLOSE v_source;
END xml_print;

上面的输出格式等自己可以控制,更多的方法可以查看dbms_xmlgen程序包

原创粉丝点击