2017-07-21 19 views
0

なしBigDecimalのフィールドを返す私は、Java(Toplinkの)からストアドプロシージャを呼び出す:PLSQLストアドプロシージャクエリ(TopLinkが)画分

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( "some_variable")に格納されているいくつかの値を返します小数部分を持つDBが、Javaでそれはそれなしで(「some_variable」)

record.getを書かれているが。はgetClass()私は、データベースに格納されている端数値を取得できますかBigDecimal.class

を返します。 ?

/** 
* 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)); 
} 

答えて

0

次のメソッドを使用する必要がありました