¿Existe una función para recuperar el XML binario de conjunto de resultados de Oracle

Karthick Sambanghi:

Estoy tratando de extraer los datos de XmlType columna "ATTRIBUTE_XML2" tienda como SecureFile BINARIO XML a partir de una base de datos Oracle 12C.

Estoy usando esta consulta de selección en mi código:

select xmlserialize(document a.xmlrecord as clob) as xmlrecord from tablename

ResultSet rset = stmt.executeQuery();

OracleResultSet orset = (OracleResultSet) rset;
while (orset.next()) {
oracle.sql.CLOB xmlrecord = (oracle.sql.CLOB) orset.getClob(1);
Reader reader = new BufferedReader(xmlrecord.getCharacterStream()); 
}

Aquí " orset.getClob" está teniendo más memoria en la base de datos Oracle y estamos saliendo de la memoria de procesos en la base de datos Oracle. Actualmente tenemos el almacenamiento de tipo XML como CLOB y el negocio le interesa cambiarlo a XML Binario.

¿Hay alguna opción para recuperar el XML binario desde el conjunto de resultados de Oracle?

Tenga en cuenta que he intentado " orset.getClob", que da como resultado un error de memoria, ya que está cambiando el código XML binario a CLOB.

También trató con " XMLType xml = (XMLType) orset.getObject(1);" Esto está muy bien trabajando, pero está tomando 27 minutos para ir a buscar 1 millón de registros XML.

Mientras que el mismo 1 millón completado en 5 minutos si el almacenamiento de tipo de tabla es CLOB en lugar de XML Binario.

¿Hay alguna otra opción para recuperar el XML BINARIO?

MT0:

La documentación de Oracle para uso de JDBC para acceder a documentos XML en Oracle XML DB establece que:

Puede seleccionar datos usando JDBC XMLType en cualquiera de estas maneras:

  • Uso de SQL / XML función XMLSerializeen SQL, y obtener el resultado como una oracle.sql.CLOB, java.lang.Stringo oracle.sql.BLOBen Java. El fragmento de Java en el Ejemplo 13-2 ilustra esto.
  • Llamada al método getObject()en el PreparedStatementque obtener toda la XMLTypeinstancia. El valor de retorno de este método es de tipo oracle.xdb.XMLType. A continuación, puede utilizar las funciones de Java en la clase XMLTypepara acceder a los datos. Ejemplo 13-3 muestra cómo hacer esto.

Por lo que debe ser capaz de utilizar XMLSERIALIZE( DOCUMENT your_binary_xml_column AS BLOB )en SQL y luego utilizar OracleResultSet#getBLOB(int)para obtener los datos binarios.

Parafraseando Oracle Ejemplo 13-2 para echar a un BLOBlugar de una CLOB:

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:@", "QUINE", "CURRY");
OraclePreparedStatement stmt = (OraclePreparedStatement) conn.prepareStatement(
     "SELECT XMLSerialize(DOCUMENT e.poDoc AS BLOB) poDoc FROM po_xml_tab e");
ResultSet rset = stmt.executeQuery();
OracleResultSet orset = (OracleResultSet) rset;
while(orset.next())
{
  // the first argument is a BLOB
  oracle.sql.BLOB clb = orset.getBLOB(1);
  // now use the BLOB inside the program
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=215612&siteId=1
Recomendado
Clasificación