2009-03-12 3 views
1

J'ai écrit la sous-classe suivante API JDBC Spring StoredProcedure:Comment écrire des sous-classes StoredProcedure pour appeler des fonctions Oracle?

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; 
} 

} 

Ce qui appelle la fonction Oracle suivante:

FUNCTION get_ldap_properties (
in_ldap_code IN VARCHAR2 
) 
RETURN rowset; 

Cependant, quand je l'appelle qui précède, je reçois l'exception suivante 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 

Quelqu'un peut-il s'il vous plaît voir ce que je fais mal?

Répondre

3

Ceci est la déclaration que vous obtiendrez un appel de fonction (à savoir avec SetFunction (true) ):

{ ? = call get_ldap_properties(?) } 

Vous avez donc besoin d'ajouter un premier paramètre pour la valeur de retour. Essayez ceci:

setFunction(true); 

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

Edit: Correction de la syntaxe pour traiter avec le retour de la fonction de la valeur et l'ensemble de lignes lors de l'utilisation d'Oracle selon Thomas Risberg answer sur les forums communautaires Spring.

+0

Merci pour la réponse, mais cela ne me dit pas comment réparer les trucs de l'ensemble de lignes. Cela répond à la question: http://forum.springframework.org/showthread.php?p=231407 –

+0

Il y avait 2 choses ici: ajouter un SqlOutParamater comme paramètre ** first ** et utiliser le bon type. Je ne sais pas pourquoi j'ai écrit Types.VARCHAR ... Je vais corriger la réponse. –

+0

Merci pour cette réponse. –

Questions connexes