Как мне написать подклассы StoredProcedure для вызова функций Oracle? - PullRequest
1 голос
/ 12 марта 2009

Я написал следующий подкласс 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;
}

}

Который вызывает следующую функцию Oracle:

FUNCTION get_ldap_properties (
in_ldap_code   IN VARCHAR2
)
RETURN rowset;

Однако, когда я вызываю вышеупомянутое, я получаю следующее исключение 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

Может кто-нибудь посмотреть, что я делаю не так?

1 Ответ

3 голосов
/ 12 марта 2009

Это утверждение, которое вы получите для вызова функции (т.е. с setFunction(true)<code>) :</p> <pre>{ ? = call get_ldap_properties(?) }

Так что вам нужно добавить первый выходной параметр для возвращаемого значения. Попробуйте вместо этого:

setFunction(true);

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

Редактировать: Исправлен синтаксис для обработки возвращаемого значения функции и набора строк при использовании Oracle в соответствии с ответом Томаса Рисберга на форумах Spring сообщества.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...