Может кто-нибудь объяснить мне, как вызвать хранимую процедуру вызова с помощью EclipseLink? Вот моя хранимая процедура:Как вызвать хранимую процедуру Oracle с использованием EclipseLink (JPA)
TYPE nested_varchar2 IS TABLE OF varchar2(15);
TYPE nested_number IS TABLE OF number(1);
procedure set_pacs_state_cond(
icond in varchar2, -- where condition
icheck_state in number, -- check expected current state
iso_id_list out nested_varchar2, -- list of suboperators
ipac_list out nested_varchar2, -- list of pacs
iresult out nested_number -- list of results
);
Я использую EclipseLink 2.4.1 в качестве реализации JPA. См. Мой код ниже.
PLSQLStoredProcedureCall call = new PLSQLStoredProcedureCall();
call.setProcedureName("PCK_PR.set_pacs_state_cond");
call.addNamedArgument("icond", "icond", Types.VARCHAR);
call.addNamedArgument("icheck_state", "icheck_state", Types.NUMERIC);
call.addNamedOutputArgument("iso_id_list", "iso_id_list", Types.ARRAY, "nested_varchar2");
call.addNamedOutputArgument("ipac_list", "ipac_list", Types.ARRAY, "nested_varchar2");
call.addNamedOutputArgument("iresult","iresult", Types.ARRAY, "nested_number");
DataModifyQuery valQuery = new DataModifyQuery();
valQuery.setCall(call);
valQuery.addArgument("icond");
valQuery.addArgument("icheck_state");
valQuery.addArgument("iso_id_list", java.sql.Array.class);
valQuery.addArgument("ipac_list", java.sql.Array.class);
valQuery.addArgument("iresult", java.sql.Array.class);
List test1 = new ArrayList();
List test2 = new ArrayList();
List test3 = new ArrayList();
valQuery.addArgumentValue("WHERE");
valQuery.addArgumentValue(1);
valQuery.addArgumentValue(test1);
valQuery.addArgumentValue(test2);
valQuery.addArgumentValue(test3);
session.executeQuery(valQuery);
List results = (List) session.executeQuery(valQuery);
em.getTransaction().commit();
DatabaseRecord record = (DatabaseRecord)results.get(0);
List ii = (List) record.get("iso_id_list");
List i = (List) record.get("ipac_list");
List r = (List) record.get("iresult");
em.close();
Я получаю следующее сообщение об ошибке: типы ТАБЛИЦА
Internal Exception: java.sql.SQLException: ORA-06550: line 5, column 21:
PLS-00201: identifier 'ARRAY' must be declared
ORA-06550: line 5, column 21:
Привет, спасибо за быстрый ответ! Я попробую и дам вам знать! Благодаря ! –
Джеймс, не могли бы вы предоставить определение своей хранимой процедуры и типов, пожалуйста? благодаря! –
Но насколько я знаю, когда вы определяете VARRAY, вам нужно указать длину исправления, правильно? Я не знаю длины во время разработки. Могу я как-нибудь справиться с этим? –