Ich habe die folgenden Frühling JDBC-API StoredProcedure Unterklasse geschrieben:Wie schreibe ich StoredProcedure-Unterklassen, um Oracle-Funktionen aufzurufen?
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;
}
}
, das die folgenden Oracle-Funktion aufruft:
FUNCTION get_ldap_properties (
in_ldap_code IN VARCHAR2
)
RETURN rowset;
Allerdings, wenn ich die oben nenne ich die folgende Oracle Ausnahme erhalten :
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
Kann jemand bitte sehen, was ich falsch mache?
Danke für die Antwort, aber das sagt mir nicht, wie man das Rowset-Zeug repariert. Dies beantwortet die Frage: http://forum.springframework.org/showthread.php?p=231407 –
Es gab 2 Dinge hier: ein SqlOutParamater als ** ersten ** Parameter hinzufügen und den guten Typ verwenden. Ich weiß nicht, warum ich Types.VARCHAR geschrieben habe ... Ich werde die Antwort reparieren. –
Danke für diese Antwort. –