【问题标题】:How to store output(XML) of the PL/SQL in oracle table如何将 PL/SQL 的输出(XML)存储在 oracle 表中
【发布时间】: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 .. 但我无法做到这一点.. 我不确定现在是否可行..

标签: xml database oracle plsql storage


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2012-12-22
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多