如何编写StoredProcedure子类来调用Oracle函数?

时间:2009-03-12 17:53:42

标签: java oracle spring jdbc

我编写了以下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 个答案:

答案 0 :(得分:3)

这是函数调用的声明(即使用setFunction(true)) :

) :


{ ? = call get_ldap_properties(?) }

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

编辑:修复了根据Thomas Risberg的answer在Spring社区论坛上使用Oracle时,处理函数返回值行的语法。