Consider the following types:
CREATE TYPE meu_tipo AS OBJECT (
meu_id NUMBER(6),
meu_nome VARCHAR2(200)
);
CREATE TYPE meu_tipo_tabela AS TABLE OF meu_tipo;
And the following package:
create or replace package pkg_test
is
procedure meu_procedure(tabela in meu_tipo_tabela);
end;
On the PL / SQL side we could call this procedure as follows:
declare
var_minha_tabela meu_tipo_tabela := meu_tipo_tabela(
meu_tipo(1,'John'),
meu_tipo(2,'Doe'),
meu_tipo(3,'Snow'));
begin
pkg_test.meu_procedure(var_minha_tabela);
end;
My question is: How do I make this same call with Java and JDBC?
public void chamarProcedure(List<MeuTipo> minhaLista) {
final String chamada = "{call PKG_TEST.MEU_PROCEDURE(?)}";
try (Connection connection = getDataSource().getConnection();
CallableStatement callableSt = connection.prepareCall(chamada)) {
// ??? - Código para criar um ARRAY, STRUCT ou algo assim a partir da lista.
callableSt.setArray(1, ???);
callableSt.executeUpdate();
} catch (SQLException e) {
logger.error("Erro ao chamar procedure", e);
// Lançamento de exceção não checada
}
}
In particular I believe that I should somehow create a oracle.sql.ARRAY
of meu_tipo_tabela
, however, I could not find any examples of how to do this (called with ARRAY
of complex objects).