2

我使用带有 spring-data-jpa 的 oracle 存储过程。在大多数情况下,它非常好,当它是一个函数或输出参数时,它是参数列表中的第一个。但是我有一些存储过程,输出参数是参数列表中的最后一个:

procedure get_data (some_val in varchar2 cur out sys_refcursor); 

或返回多个输出引用,例如

procedure get_my_data (cur1 out sys_refcursor, cur2 out sys_refcursor, some_val in varchar2); 

是否可以通过任何方式将它与 JpaRepository 一起使用?

4

2 回答 2

1

好吧,如果您想从服务或实用程序类对 StoredProc 进行本地化调用,那么您可以将 Spring Jdbc 用于 StoredProc。实施见下文

public class StoredProcSampleTest extends StoredProcedure {
private static final String SPROC_NAME = "HH_EXTRACT.SAMPLE_TEST";
public StoredProcSampleTest(DataSource dataSource) {
    super(dataSource, SPROC_NAME);
    declareParameter(new SqlParameter("v_in_msg", Types.VARCHAR));
    declareParameter(new SqlOutParameter("v_out_msg", Types.VARCHAR));
    compile();
}

public  String  execute() {
    HashMap<String, Object> hmap = new HashMap<String, Object>();
    hmap.put("v_in_msg", "Suresh");
    hmap.put("v_out_msg", "");
    Map<String, Object> results = execute(hmap);
    String outRes = (String) results.get("v_out_msg");
    return outRes;    
}

}

现在在您的实用程序类或服务类中,执行此操作

    protected StoredProcSampleTest storedProcSampleTest;


@Autowired
public void setDataSource(final DataSource dataSource) {
    this.storedProcSampleTest = new StoredProcSampleTest(dataSource);

}

public String callStoredProcSampleTest(){
    return storedProcSampleTest.execute();
}
于 2013-11-06T21:08:52.683 回答
1

最后,我自己找到了答案:)

我的情况是使用 spring-data 的自定义实现的好点 你应该:

  1. 使用您的新方法创建名为 YourRepository* Custom * 的接口(例如 EmployeeRepositoryCustom)
  2. 为此接口创建一个名为 YourRepository* Impl * 的模拟(例如 EmployeeRepositoryImpl)
  3. 在方法实现中,您可以使用 SimpleJdbcCall 来调用 Oracle 存储过程,例如
  4. ...
  5. 利润!!!

注意:如果要使用默认配置,命名规则很重要

于 2013-02-21T13:28:59.717 回答