如何从Oracle数据库中的Object Type生成XML

问题描述 投票:1回答:2

正如标题所解释的,如何将Oracle中对象类型的数据解析为XML格式?

例如,如果我有一个对象类型CUSTOMER,那么如何将数据从该对象的实例转换为XML文本?

xml oracle plsql object-type
2个回答
2
投票

首先,您创建了对象类型:

CREATE TYPE CUSTOMER AS OBJECT
   (NAME VARCHAR2(100));

它必须转换为XMLTYPE,然后您将能够使用getstringval函数从中获取XML文本。

DECLARE
  v_customer CUSTOMER;
  v_xml XMLTYPE;
BEGIN
  v_customer:= NEW CUSTOMER('Josh');
  v_xml := XMLTYPE(v_customer);
  DBMS_OUTPUT.put_line(v_xml.getstringval);
END;

这将产生以下输出:

<CUSTOMER><NAME>Josh</NAME></CUSTOMER>

0
投票

你可以使用SYS_XMLGEN

SELECT SYS_XMLGEN(v_customer, XMLFormat(enclTag =>'CUSTOMER')) 
INTO v_xml
FROM dual;

不太方便使用..但也支持TABLE OF ...类型,并且“漂亮打印”以在文本中包含新行

DECLARE
  v_customer CUSTOMER;
  v_xml XMLTYPE;
BEGIN
  v_customer:= NEW CUSTOMER('Josh');

  SELECT SYS_XMLGEN(v_customer, XMLFormat(enclTag =>'CUSTOMER')) 
    INTO v_xml
    FROM dual;
  DBMS_OUTPUT.put_line(v_xml.getstringval);
END;
/
<?xml version="1.0"?>
<CUSTOMER>
 <NAME>Josh</NAME>
</CUSTOMER>
create type tab_of_cust as TABLE OF CUSTOMER;
DECLARE
  v_customer CUSTOMER;
  v_xml XMLTYPE;

  v_tab tab_of_cust := tab_of_cust();
BEGIN
  v_customer:= NEW CUSTOMER('Josh');

  v_tab.extend(1);
  v_tab(1) := v_customer;

  SELECT SYS_XMLGEN(v_tab, XMLFormat(enclTag =>'CUST_TAB')) 
    INTO v_xml
    FROM dual;
  DBMS_OUTPUT.put_line(v_xml.getstringval);
END;
/
<?xml version="1.0"?>
<CUST_TAB>
 <CUSTOMER>
  <NAME>Josh</NAME>
 </CUSTOMER>
</CUST_TAB>
© www.soinside.com 2019 - 2024. All rights reserved.