Aquí podría ser tu PUBLICIDAD


¿Cómo escribo las subclases StoredProcedure para llamar a las funciones de Oracle?

votos
1

Escribí la siguiente subclase Spring JDBC API StoredProcedure:

class GetLdapPropertiesStoredProcedure extends StoredProcedure {

protected GetLdapPropertiesStoredProcedure(JdbcTemplate jdbcTemplate) {
    super(jdbcTemplate, get_ldap_properties);
    setFunction(true);
    declareParameter(new SqlReturnResultSet(rs, new ProductPropertiesMapper()));
    declareParameter(new SqlParameter(in_ldap_code, Types.VARCHAR));
    compile();
}

public Properties execute(String productCode) {
    HashMap input = new HashMap();
    input.put(in_ldap_code, productCode);

    Map results = execute(input);

    Collection<Map.Entry<Object,Object>> entries = (Collection<Map.Entry<Object,Object>>) results.get(rs);
    Properties properties = new Properties();
    properties.entrySet().addAll(entries);
    return properties;
}

}

Que llama a la siguiente función de Oracle:

FUNCTION get_ldap_properties (
in_ldap_code   IN VARCHAR2
)
RETURN rowset;

Sin embargo, cuando llamo al anterior, recibo la siguiente excepción de Oracle:

java.sql.SQLException: ORA-06550: line 1, column 13:
PLS-00306: wrong number or types of arguments in call to 'GET_LDAP_PROPERTIES'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

¿Alguien puede ver lo que estoy haciendo mal?

Publicado el 12/03/2009 a las 18:53
fuente por usuario Ricardo Gladwell
En otros idiomas...        العربية       

1 respuestas

votos
3

Esta es la declaración que obtendrá para una llamada de función (es decir, con setFunction(true)) :

{ ? = call get_ldap_properties(?) }

So you need to add a first out parameter for the return value. Try this instead:

setFunction(true);

// The return value parameter must be the first parameter that you declare.
declareParameter(new SqlOutParameter("RETURN_VALUE", OracleTypes.CURSOR, new ProductPropertiesMapper()));

Editar: se corrigió la sintaxis para tratar con el valor de retorno de la función y el conjunto de filas cuando se usa Oracle según la respuesta de Thomas Risberg en los foros de la comunidad de Spring.

Respondida el 12/03/2009 a las 07:10
fuente por usuario Pascal Thivent


Aquí podría ser tu PUBLICIDAD