使用内存中的表数据使用Oracle XMLgen实用程序创建XML

使用内存中的表数据使用Oracle XMLgen实用程序创建XML,oracle,oracle10g,Oracle,Oracle10g,我在Oracle中使用dbms.xmlgen实用程序从保存到Oracle内存表的数据创建XML文档 我的过程是将数据保存在Oracle类型的ITEM_数组中。这是ITEM_对象类型的表 最后,数据在我的ITEM_数组中。现在我想把这些数据转换成XML。所以我使用下面的代码 ctx:= DBMS_XMLGEN.newContext(' SELECT * FROM TABLE(CAST(V_ITEMLIST AS ITEM_ARRAY)) where (ITEM_NO is not null o

我在Oracle中使用dbms.xmlgen实用程序从保存到Oracle内存表的数据创建XML文档

我的过程是将数据保存在Oracle类型的ITEM_数组中。这是ITEM_对象类型的表

最后,数据在我的ITEM_数组中。现在我想把这些数据转换成XML。所以我使用下面的代码

ctx:= DBMS_XMLGEN.newContext(' SELECT *  FROM TABLE(CAST(V_ITEMLIST AS ITEM_ARRAY))  where (ITEM_NO is not null or trim(ITEM_NO) is not null) order by ITEM_NO,PARTYABBRVCODE ');
DBMS_XMLGEN.setRowTag (ctx, 'itembom');
DBMS_XMLGEN.setRowSetTag (ctx, 'itemboms');
xmldoc := DBMS_XMLGEN.getXML(ctx); 
My此代码返回的错误是V_ITEMLIST不存在

但是当我做dbms_的时候

For I In 1..V_Itemlist.Count Loop
Dbms_Output.Put_Line('Partyabbrvcode '||V_Itemlist(I).Partyabbrvcode);
DBms_Output.Put_Line('Item_No'||V_Itemlist(I).Item_No);
这是返回值

我尝试了不同的方法,比如将V_ITEMLIST保存到游标中,然后调用下面的代码

ctx := dbms_xmlgen.newContext (ITEMCUR);
xmldoc := DBMS_XMLGEN.getXML(ctx);
DBMS_XMLGEN.closeContext(ctx);
项目光标所在的位置

SELECT *  FROM TABLE(CAST(V_ITEMLIST AS ITEM_ARRAY))  where (ITEM_NO is not null or trim(ITEM_NO) is not null) order by ITEM_NO,PARTYABBRVCODE.
这也会显示错误数字或值错误


任何人请建议如何实现这一点。

DBMS\u XMLGEN.newContext执行SQL查询,但SQL无法直接访问PL/SQL数据。查询必须调用返回相关数据的函数

SQL> set long 1000
SQL>
SQL> create or replace package xml_package as
  2     type varchar2_table is table of varchar2(100);
  3     function get_items return varchar2_table pipelined;
  4     function get_xml return clob;
  5  end;
  6  /

Package created.

SQL>
SQL> create or replace package body xml_package as
  2     g_items varchar2_table := varchar2_table();
  3
  4     function get_items return varchar2_table pipelined is
  5     begin
  6             for i in 1 .. g_items.count loop
  7                     pipe row(g_items(i));
  8             end loop;
  9     end;
 10
 11     function get_xml return clob is
 12             v_xml clob;
 13             v_context number;
 14     begin
 15             g_items := varchar2_table('item1', 'item2', 'item3');
 16             v_context := dbms_xmlgen.newContext(
 17                     'select * from table(xml_package.get_items)');
 18             v_xml := dbms_xmlgen.getXML(v_context);
 19             return v_xml;
 20     end;
 21  end;
 22  /

Package body created.

SQL>
SQL> select xml_package.get_xml from dual;

GET_XML
-------------------------------------------------------------------------------
<?xml version="1.0"?>
<ROWSET>
 <ROW>
  <COLUMN_VALUE>item1</COLUMN_VALUE>
 </ROW>
 <ROW>
  <COLUMN_VALUE>item2</COLUMN_VALUE>
 </ROW>
 <ROW>
  <COLUMN_VALUE>item3</COLUMN_VALUE>
 </ROW>
</ROWSET>

DBMS_XMLGEN.newContext执行SQL查询,但SQL无法直接访问PL/SQL数据。查询必须调用返回相关数据的函数

SQL> set long 1000
SQL>
SQL> create or replace package xml_package as
  2     type varchar2_table is table of varchar2(100);
  3     function get_items return varchar2_table pipelined;
  4     function get_xml return clob;
  5  end;
  6  /

Package created.

SQL>
SQL> create or replace package body xml_package as
  2     g_items varchar2_table := varchar2_table();
  3
  4     function get_items return varchar2_table pipelined is
  5     begin
  6             for i in 1 .. g_items.count loop
  7                     pipe row(g_items(i));
  8             end loop;
  9     end;
 10
 11     function get_xml return clob is
 12             v_xml clob;
 13             v_context number;
 14     begin
 15             g_items := varchar2_table('item1', 'item2', 'item3');
 16             v_context := dbms_xmlgen.newContext(
 17                     'select * from table(xml_package.get_items)');
 18             v_xml := dbms_xmlgen.getXML(v_context);
 19             return v_xml;
 20     end;
 21  end;
 22  /

Package body created.

SQL>
SQL> select xml_package.get_xml from dual;

GET_XML
-------------------------------------------------------------------------------
<?xml version="1.0"?>
<ROWSET>
 <ROW>
  <COLUMN_VALUE>item1</COLUMN_VALUE>
 </ROW>
 <ROW>
  <COLUMN_VALUE>item2</COLUMN_VALUE>
 </ROW>
 <ROW>
  <COLUMN_VALUE>item3</COLUMN_VALUE>
 </ROW>
</ROWSET>

欢迎来到StackOverflow。几行代码不使用任何形式的引号进行格式化,只是缩进。只需插入代码,选择它并单击{}按钮。使用全大写被认为是不好的风格。我都修好了。欢迎来到StackOverflow。几行代码不使用任何形式的引号进行格式化,只是缩进。只需插入代码,选择它并单击{}按钮。使用全大写被认为是不好的风格。我都修好了。