如何将 PL/SQL 的输出(XML)存储在 oracle 表中

Posted

技术标签:

【中文标题】如何将 PL/SQL 的输出(XML)存储在 oracle 表中【英文标题】:How to store output(XML) of the PL/SQL in oracle table 【发布时间】:2020-06-03 09:47:31 【问题描述】:

我写了一个插入查询,它可以在如下表中获取存储的 XML 数据:

INSERT INTO XmlTest VALUES (
  XMLType('<?xml version="1.0"?>
<ROWSET>
 <ROW>
  <ID>1</ID>
  <RANK>1</RANK>
  <URBAN_AREA>Tokyo-Yokohama (Keihin)</URBAN_AREA>
  <COUNTRY>Japan</COUNTRY>
  <POPULATION>37126000</POPULATION>
 </ROW>
 </ROWSET>'
 ));

正在成功插入..存在的 XML 必须是从 PL/SQL 编写的代码的输出,即:

DECLARE
   l_refcursor SYS_REFCURSOR;
   l_xmltype XMLTYPE;
BEGIN
   OPEN l_refcursor FOR select id,
       rank,
       urban_area,
       country,
       population      
from eba_dp_demo_table where country='China'  and population>3500000;
l_xmltype := XMLTYPE(l_refcursor);
dbms_output.put_line(l_xmltype.getClobVal);

基本上我试图用 PL/SQL 代码代替 XML 代码有没有办法做到这一点..我无法实现它如果有人可以帮助我,那就太好了......

【问题讨论】:

那么实际的问题是什么? 我认为您的问题有点令人困惑。你想将光标的结果转换为 xml 吗?为什么要展示如何将 xml 插入到 datebele 中?上下文在哪里? 我正在尝试将报告转换为 XML 并将其存储在表中,稍后获取 XML 数据并将其转换为 PDF 或其他格式。 @hotfix。 @Tejash 我试图用 PL/SQL 代码代替 XML .. 但我无法做到这一点.. 我不确定现在是否可行.. 【参考方案1】:

您可以使用XMLELEMENT 从查询脚本中生成您想要的 XML 标签。

CREATE TABLE EBA_DP_DEMO_TABLE
AS
SELECT 1 ID_,1 RANK_, 'Tokyo-Yokohama (Keihin)' AS URBAN_AREA , 'Japan' COUNTRY ,'37126000' POPULATION FROM DUAL
UNION ALL
SELECT 2 ID_,2 RANK_, 'Abidinpasa' AS URBAN_AREA , 'Turkey' COUNTRY ,'6666' POPULATION FROM DUAL;

DECLARE
   L_REFCURSOR   SYS_REFCURSOR;
   L_XMLTYPE     XMLTYPE;
BEGIN
   OPEN L_REFCURSOR FOR
      SELECT
            '<?xml version="1.0"?><ROWSET><ROW>'
             || ID
             || RANK
             || URBAN_AREA
             || COUNTRY
             || POPULATION
             || '</ROW></ROWSET>'
        FROM (SELECT XMLELEMENT ("ID", ID_) ID,
                     XMLELEMENT ("RANK", RANK_) RANK,
                     XMLELEMENT ("URBAN_AREA", URBAN_AREA) URBAN_AREA,
                     XMLELEMENT ("COUNTRY", COUNTRY) COUNTRY,
                     XMLELEMENT ("POPULATION", POPULATION) POPULATION
                FROM EBA_DP_DEMO_TABLE
               WHERE COUNTRY = 'Turkey');

   L_XMLTYPE := XMLTYPE (L_REFCURSOR);
   DBMS_OUTPUT.PUT_LINE (L_XMLTYPE.GETCLOBVAL);
END;

【讨论】:

以上是关于如何将 PL/SQL 的输出(XML)存储在 oracle 表中的主要内容,如果未能解决你的问题,请参考以下文章

在 PL/SQL 中解析 XML 或 JSON

将 XML 数据存储在表中的 PL/SQL 过程抛出错误(23,102):PL/SQL:ORA-00907:缺少右括号

如何使用 PL SQL 输出这种 XML 格式

如何使用 PL SQL 函数从 xmltype 数据生成 xml 报告

将 100,000 条记录从 PL/SQL 程序输出到 XML 文件的最佳方法

在 XML 字段上执行 pl/sql GROUP BY 会给出“ORA-22806: not an object or REF”