2017-07-21 2 views
0

j'appelle la procédure stockée de Java (Toplink) comme suit:PLSQL requête de procédure stockée (TopLink) retourne champs BigDecimal sans fraction

PLSQLStoredProcedureCall call = new PLSQLStoredProcedureCall(); 
call.setProcedureName("PACK_PORTAL_VIEW.get_payment_details"); 
call.addNamedArgument("p_order_id", JDBCTypes.NUMERIC_TYPE); 
call.addNamedOutputArgument("some_variable", JDBCTypes.NUMERIC_TYPE); 

DataReadQuery drQuery = new DataReadQuery(); 
drQuery.setCall(call); 
drQuery.addArgument("p_order_id"); 

Query query = ((JpaEntityManager) em.getDelegate()).createQuery(drQuery); 
query.setParameter("p_order_id", orderId); 

DatabaseRecord record = (DatabaseRecord) query.getSingleResult(); 
record.get("some_variable"); 

record.get ("une_variable") renvoie une valeur qui est stockée dans DB avec une partie décimale, mais en java il est écrit sans elle

record.get (« une_variable »). getClass() retourne BigDecimal.class

Comment puis-je obtenir la valeur fractionnelle stockée dans la base de données ?

Répondre

0

Il était nécessaire d'utiliser la méthode suivante:

/** 
* PUBLIC: Add a named OUT argument to the stored procedure. The databaseType parameter 
* classifies the parameter (JDBCType vs. OraclePLSQLType, simple vs. complex). The extra scale 
* and precision parameters indicates that this parameter, when used in an Anonymous PL/SQL 
* block, requires scale and precision specification 
*/ 
public void addNamedOutputArgument(String procedureParameterName, DatabaseType databaseType, 
    int precision, int scale) { 
    DatabaseType dt = databaseType.isComplexDatabaseType() ? 
     ((ComplexDatabaseType)databaseType).clone() : databaseType; 
    arguments.add(new PLSQLargument(procedureParameterName, originalIndex++, OUT, dt, 
     precision, scale)); 
}