Tenho um tipo TABLE na entrada e na saída da procedure. Dentro da table tem records:
TYPE Item_Rec_Type IS RECORD(
Transaction_Type VARCHAR2(30)
,Return_Status VARCHAR2(1) := G_MISS_CHAR
,Language_Code VARCHAR2(4) := G_MISS_CHAR);
TYPE Item_Tbl_Type IS TABLE OF Item_Rec_Type INDEX BY BINARY_INTEGER;
// Parâmetros da procedure
PROCEDURE Process_Items(
p_api_version IN NUMBER
,p_Item_Tbl IN EGO_Item_PUB.Item_Tbl_Type
,x_Item_Tbl OUT NOCOPY EGO_Item_PUB.Item_Tbl_Type
,x_return_status OUT NOCOPY VARCHAR2
,x_msg_count OUT NOCOPY NUMBER);
No java estou tentando dessa maneira:
[code]System.out.println(">>>>>>>>>> Conexão feita >>>>>…");
CallableStatement cstmt = con
.prepareCall("{call APPS.EGO_ITEM_PUB.PROCESS_ITEMS(?, ?, ?, ?, ?, ?, ?, ?)}");
// Mapeamento de tipos do oracle
StructDescriptor structDescItemTableEntrada = StructDescriptor.createDescriptor("APPS.EGO_ITEM_PUB.ITEM_TBL_TYPE", con);
System.out.println("Passou por um descriptor");
StructDescriptor structDescItemTableSaida = StructDescriptor.createDescriptor("APPS.EGO_ITEM_PUB.ITEM_TBL_TYPE", con);
StructDescriptor structDescRoleGrantEntrada = StructDescriptor.createDescriptor("APPS.EGO_ITEM_PUB.ROLE_GRANT_TBL_TYPE", con);
Object[] atributosItemTabelaEntrada = new Object[368];
Object[] atributosItemTabelaSaida = new Object[368];
String[] passagemParametro = new String[1];
passagemParametro[0] = "CREATE";
atributosItemTabelaEntrada[0] = passagemParametro[0];
STRUCT itemTabelaTypeEntrada = new STRUCT(structDescItemTableEntrada, con, atributosItemTabelaEntrada);
STRUCT itemTabelaTypeSaida = new STRUCT(structDescItemTableSaida, con, atributosItemTabelaEntrada);
System.out.println("Entrará para setar query!!!");
// Setar dados procedure
cstmt.setString(1, boEntrada.getString("p_api_version"));
cstmt.setString(2, boEntrada.getString("p_init_msg_list"));
cstmt.setString(3, boEntrada.getString("p_commit"));
cstmt.setObject(4, atributosItemTabelaEntrada);
cstmt.registerOutParameter(5, oracle.jdbc.driver.OracleTypes.STRUCT, "APPS.EGO_ITEM_PUB.ITEM_TBL_TYPE");
cstmt.setObject(6, null);
cstmt.registerOutParameter(7, oracle.jdbc.driver.OracleTypes.VARCHAR);
cstmt.registerOutParameter(8, oracle.jdbc.driver.OracleTypes.VARCHAR);
cstmt.execute();
System.out.println("Passou execute");
String count = (String) cstmt.getObject(9);
if (count != null) {
System.out.println("Veio resultado: " + count);
if (Integer.parseInt(count)>0){
return "falha";
}
}
// Fechar conexão
con.close();[/code]
Essa é a maneira de inserir dados em um RECORD dentro de um TABLE?
E como devo tratar a saída?
Ainda não cheguei na parte da query, está ocorrendo o erro:
java.sql.SQLException: invalid name pattern: APPS.EGO_ITEM_PUB.ITEM_TBL_TYPE
Mas esse tipo está dentro desse pacote que está dentro desse schema.
Desde já grato pela ajuda.