xml - 如何将 PL/SQL 的输出(XML)存储在 oracle 表中
问题描述
我写了一个插入查询,它可以获取存储在表中的 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 代码的位置有没有办法做到这一点..我无法实现它,如果有人能帮助我,那就太好了......
解决方案
您可以使用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;
推荐阅读
- java - 如何在java中使用for循环获得平均值?
- .net - 在 .net ef 中为“内容类型”实体建模的正确方法
- java - 调用 AWS API - 签名、身份验证标头 - 在 android 中使用 OkHTTP
- c++ - 异步线程竞争条件
- sql - oracle sql developer有没有办法一次创建多个用户
- android - React 无法启动 Android App 无法初始化类
- docker - It takes too long to shut down the Docker container
- python - 根据 pandas df 中的条件在现有列中插入新行
- c# - 失去焦点时从按钮中删除灰色边框
- java - 如何在 IntelliJ 中更改为 gradle 任务分配的内存