Ao utilizar o Driver do Oracle ojdbc.jar versão 11.2.0.x, não foi possível atribuir NULL a uma coluna do tipo XMLTYPE, utilizando o java.sql.Type correspondente. Assim, na execução do código statement.setNull(i, Types.SQLXML) o driver lança o seguinte erro: SQLException: Invalid column type: sqlType=2009.
Após gastar um tempo de pesquisa, não encontrei nenhum fix do driver. O que encontrei foi uma solução de contorno, conforme código abaixo.
/**
* Não funciona st.setNull(i, Types.SQLXML)
* ERRO: java.sql.SQLException: Invalid column type: sqlType=2009
* WORKAROUNDS:
* (1) st.setNull(i, Types.VARCHAR) ==> https://bugs.eclipse.org/bugs/show_bug.cgi?id=365210#c2
* (2) st.setNull(i, Types.STRUCT, “XMLTYPE”) ==> http://www.dba.bg/blogs/oracle/5016-issue-with-jdbc-driver-upgrade-from-11-2-0-2-to-11-2-0-4-error-message- java-sql-sqlexception-invalid-column-type-sqltype-2009
**/
SQLXML sqlXML = null;
if (sqlXML != null) {
sqlXML = con.createSQLXML();
sqlXML.setString(xml); // conteúdo String do XML em questão
}
if (sqlXML == null) {
st.setNull(i, Types.STRUCT, “XMLTYPE”);
} else
st.setSQLXML(i, sqlXML); // Respectiva coluna do tipo XMLTYPE