如何将 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 表中的主要内容,如果未能解决你的问题,请参考以下文章
将 XML 数据存储在表中的 PL/SQL 过程抛出错误(23,102):PL/SQL:ORA-00907:缺少右括号
如何使用 PL SQL 函数从 xmltype 数据生成 xml 报告
将 100,000 条记录从 PL/SQL 程序输出到 XML 文件的最佳方法
在 XML 字段上执行 pl/sql GROUP BY 会给出“ORA-22806: not an object or REF”