eclipselink存储过程数组

时间:2013-04-04 06:51:15

标签: oracle stored-procedures eclipselink

我想用eclipselink中的输入数组执行存储过程(oracle)。

EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
StoredProcedureCall call = new StoredProcedureCall();
call.setProcedureName("P_TEST2");
ReadQuery mquery = new DataReadQuery();

call.addNamedArgument("x");
call.addNamedOutputArgument("z");

mquery.setCall(call);

int [] x = {1,2,3};
Query query = ((JpaEntityManager)entityManager.getDelegate()).createQuery(mquery)
    .setParameter("x", x);
DatabaseRecord record = (DatabaseRecord) query.getSingleResult();
System.out.println(record.get("z"));

程序本身

create or replace procedure p_test2(
  x in numeric_array,
  z out numeric
)
AS
BEGIN
  FOR i IN x.first .. x.last
      LOOP
        INSERT INTO TEST2(ID,VALUE) VALUES (SEQ1.nextval,i);
      END LOOP;
  commit;
  z := seq1.currval;
END;
/

但是它存在问题,数组中的问题,我认为。

需要你的帮助。

1 个答案:

答案 0 :(得分:-1)

以这种方式解决它:

  1. 编写函数/过程,接受字符串(以空格或逗号分隔的数组)
  2. 在函数解析参数中并将它们转换为数字表(或任何需要的类型)
  3. 调用所需功能
  4. 返回所需结果