Используя Java и Spring Data, мне нужно вызвать следующую хранимую процедуру из базы данных Oracle:
TYPE R_ID_INSC_TYPE IS RECORD(id_insc INSC_REGISTRE.ID%TYPE);
TYPE T_ID_INSC IS TABLE OF R_ID_INSC_TYPE INDEX BY BINARY_INTEGER;
PROCEDURE CHARGER_RECHERCHE
(
P_NO_DEMANDE IN NUMBER,
P_SEQ_DEM IN NUMBER,
P_ETAPE_RECH IN VARCHAR2,
P_ID_INSC_TAB IN T_ID_INSC
);
Что, кажется, вызывает у меня проблемы, это последний параметр в этой хранимой процедуре, который должен быть списком идентификаторов. Вот как я называю это на Java:
public void call(final Integer numeroDemande,
final Integer numeroSequenceDemande,
final EtapeRecherche etapeRecherche,
final Integer[] ids) {
new SimpleJdbcCall(this.jdbcTemplate)
.withSchemaName(this.schemaName)
.withProcedureName(this.procedureName)
.declareParameters(
new SqlParameter("P_NO_DEMANDE", Types.INTEGER),
new SqlParameter("P_SEQ_DEM", Types.INTEGER),
new SqlParameter("P_ETAPE_RECH", Types.VARCHAR),
new SqlParameter("P_ID_INSC_TAB", Types.ARRAY))
.execute(numeroDemande, numeroSequenceDemande, etapeRecherche.getValue(), ids);
}
Который выдает следующую ошибку:
org.springframework.jdbc.BadSqlGrammarException: CallableStatementCallback; bad SQL grammar [{call PLATEFORME.CHARGER_RECHERCHE()}];
nested exception is java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'CHARGER_RECHERCHE'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
Лицо, ответственное за реализацию хранимой процедуры, также предоставило нам следующий пример использования:
declare
P_ID_INSC_TAB PLATEFORME.T_ID_INSC;
P_NO_DEMANDE NUMBER:=317225;
P_SEQ_DEM NUMBER:=1;
P_ETAPE_RECH VARCHAR2(2):='AI';
begin
P_ID_INSC_TAB(1).id_insc:=1258773;
P_ID_INSC_TAB(2).id_insc:=1258774;
P_ID_INSC_TAB(3).id_insc:=1258775;
PLATEFORME.CHARGER_RECHERCHE(P_NO_DEMANDE,P_SEQ_DEM,P_ETAPE_RECH,P_ID_INSC_TAB);
end;
Лицо, ответственное за реализацию хранимой процедуры, также предложило изменить определение на это, если это может облегчить задачу:
TYPE T_ID_INSC IS TABLE OF NUMBER(9) INDEX BY BINARY_INTEGER;
PROCEDURE CHARGER_RECHERCHE
(
P_NO_DEMANDE IN NUMBER,
P_SEQ_DEM IN NUMBER,
P_ETAPE_RECH IN VARCHAR2,
P_ID_INSC_TAB IN T_ID_INSC
);
Что мне нужно сделать, чтобы успешно вызвать эту хранимую процедуру?
Спасибо.