【问题标题】:How to generate XML from Object Type in Oracle database如何从 Oracle 数据库中的对象类型生成 XML
【发布时间】:2017-04-13 13:52:18
【问题描述】:

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

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

【问题讨论】:

    标签: xml oracle plsql object-type


    【解决方案1】:

    首先你创建了你的对象类型:

    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>
    

    【讨论】:

    • 另外,如果您在描述字段并在引号中键入名称时需要区分大小写的xml,例如CREATE TYPE CUSTOMER AS OBJECT ("Name" VARCHAR2(100));' then the output will be Josh`
    【解决方案2】:

    你可以使用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>
    

    【讨论】:

      猜你喜欢
      • 2014-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      相关资源
      最近更新 更多