Я звоню в Stored Pro c из JPA данных Spring:
Процедура:
create or replace procedure GET_LATEST_GC (arg1 IN VARCHAR2, res1 OUT VARCHAR2, res2 OUT VARCHAR2)
AS
BEGIN
DELETE FROM GC_T WHERE id = arg1;
COMMIT;
BEGIN
SELECT gc.NAME, s.SIP INTO res1, res2
FROM GC_T gc, STAFF_T s WHERE s.id = gc.id
AND START_TIME = (SELECT MAX(START_TIME) FROM GC_T);
EXCEPTION
WHEN others THEN
res1 := '';
END;
END;
Код JPA данных Spring *
// Хранилище
public interface ActiveDao extends JpaRepository<GcT,Integer> {
@Procedure(procedureName="GET_LATEST_GC")
Object[] plus1(@Param("arg1") String arg1);
}
// Entity
@Data
@Entity
@NamedStoredProcedureQuery(name = "GET_LATEST_GC",
procedureName = "GET_LATEST_GC", parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "arg1", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "res1", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "res2", type = String.class)})
@Table(schema = "abc", name = "GC_T")
public class GcT implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID")
private String id;
@Column(name = "NAME")
private String name;
}
// Вызов
Object[] activeGCInfo =activeDao.plus1(arg);
Процедура принимает один параметр, и я также передаю 1 аргумент. Затем я также получаю эту ошибку :
Hibernate: {вызов GET_LATEST_G C (?,?)} ОШИБКА ohejdb c .spi.SqlExceptionHelper - ORA-06550: строка 1, столбец 7: \ nPLS-00306: неправильный номер или типы аргументов в вызове 'GET_LATEST_G C' \ nORA-06550: строка 1, столбец 7: \ nPL / SQL: оператор игнорируется \ n
Пожалуйста, дайте мне знать, где я делаю неправильно. Спасибо
Обновление - попытался добавить параметры OUT также в соответствии с предложением
//Repo
public interface ActiveDao extends JpaRepository<GcT,Integer> {
@Procedure(procedureName="GET_LATEST_GC")
Object[] plus1(@Param("arg1") String arg1,@Param("res1") String res1,@Param("res2") String res2);
}
//Call
Object[] activeGCInfo =activeDao.plus1(arg,"","");
Я посылаю три аргумента, но он показывает мне 4 аргумента по ошибке:
Hibernate: {call GET_LATEST_G C (?,?,?,?)} SqlExceptionHelper - ORA-06550: строка 1, столбец 7: \ nPLS-00306: неверное число или типы аргументов в вызов 'GET_LATEST_G C' \ nORA-06550: строка 1, столбец 7: \ nPL / SQL: оператор игнорируется \ n