首页 > 解决方案 > 错误 ORA-00902:在 oracle 数据库中使用 XMLSERIALIZE 的数据类型无效

问题描述

我正在尝试缩进一个 xml。现在我可以在一行中生成它,但我发现了 ORACLE XMLSERIALE。我做了一些测试,它工作正常,但是这个函数改变了编码 windows-1252 第一行的编码类型。所以现在我试图将编码语法设置为 xmlserialize 函数,但是 sql 开发人员编译器给了我错误 ORA-00902: invalid datatype。

从关系数据生成 XML 数据 - 8.2.7 XMLSERIALIZE SQL/XML 函数 关于 ENCODING: ENCODING 子句指定序列化为 BLOB 实例的 XML 数据的字符编码。xml_encoding_spec 是一个 XML 编码声明(encoding="...")。如果数据类型为 BLOB 并且您指定了 ENCODING 子句,则输出按指定编码,并将 xml_encoding_spec 添加到序言以指示 BLOB 编码。如果使用 BLOB 以外的数据类型指定 ENCODING 子句,则会引发错误。对于 UTF-16 字符,xml_encoding_spec 必须是以下之一:

encoding=UTF-16BE – 大端 UTF-16 编码

encoding=UTF-16LE – Little-endian UTF-16 编码

从关系数据生成 XML 数据

这是我的代码:

begin
    SELECT XMLSERIALIZE(Document XMLTYPE(doc_xml) AS CLOB ENCODING="UTF-8" INDENT SIZE = 4) into  doc_xml FROM dual;
    exception
      when others then
        DBMS_OUTPUT.PUT_LINE(SQLERRM);
        return;
end;

doc_xml 是一个 clob。我试过不编码并且函数工作正常,而不是编码我得到错误ORA-902。

任何人都可以给出正确语法的想法吗?

测试我的问题的最小示例

SELECT XMLSERIALIZE(Document XMLTYPE('<?xml version="1.0" encoding="UTF-8" standalone="yes"?><p:FatturaElettronica xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2" versione="FPR12"><FatturaElettronicaBody><DatiGenerali><DatiGeneraliDocumento><TipoDocumento>TD17</TipoDocumento><Divisa>EUR</Divisa><Data>2021-08-04</Data><Numero>200025</Numero><ImportoTotaleDocumento>1000.00</ImportoTotaleDocumento></DatiGeneraliDocumento></DatiGenerali><DatiBeniServizi><DettaglioLinee><NumeroLinea>1</NumeroLinea><Descrizione>REVERSE CHARGE</Descrizione><PrezzoUnitario>1000.000000</PrezzoUnitario><PrezzoTotale>1000.00</PrezzoTotale><AliquotaIVA>22.00</AliquotaIVA></DettaglioLinee><DatiRiepilogo><AliquotaIVA>22.00</AliquotaIVA><ImponibileImporto>1000.00</ImponibileImporto><Imposta>220.00</Imposta><EsigibilitaIVA>I</EsigibilitaIVA></DatiRiepilogo></DatiBeniServizi></FatturaElettronicaBody></p:FatturaElettronica>') AS CLOB INDENT SIZE = 4) 
FROM dual;

标签: plsqloracle11g

解决方案


推荐阅读