У меня возникла проблема при вызове хранимой процедуры в Spring JPA с использованием @NamedStoredProcedureQuery. Моя хранимая процедура вернет несколько параметров, включая REF_CURSOR и NUMBER (например, REF_CURSOR предназначен для набора результатов, а число — для возврата общего количества записей).
Поэтому мой код такой — мой класс сущности:
@Entity
@NamedStoredProcedureQuery(name = "User.multiple_out_parameters", procedureName = "multiple_out_parameters", parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "arg", type = Integer.class),
@StoredProcedureParameter(mode = ParameterMode.REF_CURSOR, name = "some_cursor", type = void.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "res", type = Integer.class) })
public class User {}
org.springframework.dao.IncorrectResultSizeDataAccessException: вызов хранимой процедуры [PKG_DUBAOTHUONGPHAMCMIS] .GET_THUONGPHAM] вернул несколько результатов
Кто-нибудь может мне помочь, я буду благодарен, потому что я нигде не могу найти ответ в интернете.
У меня возникла проблема при вызове хранимой процедуры в Spring JPA с использованием @NamedStoredProcedureQuery. Моя хранимая процедура вернет несколько параметров, включая REF_CURSOR и NUMBER (например, REF_CURSOR предназначен для набора результатов, а число — для возврата общего количества записей). Поэтому мой код такой — мой класс сущности: [code]@Getter @Setter @Builder @NoArgsConstructor @AllArgsConstructor @FieldDefaults(level = AccessLevel.PRIVATE) @Entity @IdClass(PowerSellDataId.class) @NamedStoredProcedureQuery( name = "PowerSellData.getPowerData", procedureName = "PKG_DUBAOTHUONGPHAMCMIS.GET_THUONGPHAM", //resultClasses = PowerSellData.class, //resultClasses = {PowerSellData.class}, parameters = { @StoredProcedureParameter(mode = ParameterMode.IN, name = "P_MADVIQLY", type = String.class), @StoredProcedureParameter(mode = ParameterMode.IN, name = "P_THANG", type = Integer.class), @StoredProcedureParameter(mode = ParameterMode.IN, name = "P_NAM", type = Integer.class), @StoredProcedureParameter(mode = ParameterMode.IN, name = "P_LOAIDULIEU", type = Integer.class), @StoredProcedureParameter(mode = ParameterMode.IN, name = "P_SOKY", type = Integer.class), @StoredProcedureParameter(mode = ParameterMode.IN, name = "P_LOAIKH", type = Integer.class), @StoredProcedureParameter(mode = ParameterMode.IN, name = "P_PAGE_NUMBER", type = Integer.class), @StoredProcedureParameter(mode = ParameterMode.IN, name = "P_PAGE_SIZE", type = Integer.class), @StoredProcedureParameter(mode = ParameterMode.REF_CURSOR, name = "P_RST", type = void.class), //@StoredProcedureParameter(mode = ParameterMode.OUT, name = "P_RST", type = Integer.class), @StoredProcedureParameter(mode = ParameterMode.OUT, name = "P_TOTAL_RECORDS", type = Integer.class)
@Repository public interface PowerRepository extends JpaRepository { @Procedure(name = "PowerSellData.getPowerData") // List getPowerData Map getPowerData( @Param("P_MADVIQLY") String madviqly, @Param("P_THANG") int thang, @Param("P_NAM") int nam, @Param("P_LOAIDULIEU") int loaiDulieu, @Param("P_SOKY") int soKy, @Param("P_LOAIKH") int loaiKh, @Param("P_PAGE_NUMBER") int page, @Param("P_PAGE_SIZE") int size); } [/code] Мой класс обслуживания: [code]@Service @RequiredArgsConstructor @FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) @Slf4j public class PowerDataService { PowerRepository powerRepository; PowerDataMapper powerDataMapper;
@Transactional(readOnly = true) public PaginationResponse getSellPowerData( String madviqly, int thang, int nam, int loaiDulieu, int soKy, int loaiKh, int page, int size) { //List Map sellPowerData = null; int totalRecords = 0; int totalPages = 0; try { sellPowerData = powerRepository.getPowerData(madviqly, thang, nam, loaiDulieu, soKy, loaiKh, page, size); //.get("P_RST"); totalPages = totalRecords / size; } catch (Exception e) { e.printStackTrace(); // Prints full stack trace throw new RuntimeException("Error fetching data from repository: " + e.getMessage(), e); } List listPowerData = Arrays.asList(sellPowerData); // var result = listPowerData.stream() // .map(powerDataMapper::toPowerSellDataResponse) // .toList(); return PaginationResponse.builder() .currentPage(page) .pageSize(0) .totalPages(totalPages) .totalElements(totalRecords) .data((List)listPowerData) .build(); } } [/code] Я применяю точно так же, как документ на веб-сайте Spring JPA: https://docs.spring.io/spring-data/jpa/reference/jpa/stored-procedures.html p> Пример 7: определения метаданных хранимой процедуры для объекта: [code] @Entity @NamedStoredProcedureQuery(name = "User.multiple_out_parameters", procedureName = "multiple_out_parameters", parameters = { @StoredProcedureParameter(mode = ParameterMode.IN, name = "arg", type = Integer.class), @StoredProcedureParameter(mode = ParameterMode.REF_CURSOR, name = "some_cursor", type = void.class), @StoredProcedureParameter(mode = ParameterMode.OUT, name = "res", type = Integer.class) }) public class User {} [/code] Пример 8: возврат нескольких параметров OUT: [code]@Procedure(name = "User.multiple_out_parameters") Map returnsMultipleOutParameters(@Param("arg") Integer arg); [/code] Но выдает такую ошибку:
org.springframework.dao.IncorrectResultSizeDataAccessException: вызов хранимой процедуры [PKG_DUBAOTHUONGPHAMCMIS] .GET_THUONGPHAM] вернул несколько результатов
Кто-нибудь может мне помочь, я буду благодарен, потому что я нигде не могу найти ответ в интернете.
Я разрабатываю Java-приложение, и мне нужно написать отдельную хранимую процедуру в MySQL для создания самой базы данных по запросу:
CREATE DATABASE IF NOT EXISTS db_name;
Я пытаюсь вызвать хранимую процедуру Oracle из C#, которая принимает sys.odcivarchar2list (таблица varchar2 ) в качестве параметров ввода. ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call to...
Я пытаюсь вызвать хранимую процедуру Oracle из C#, которая принимает sys.odcivarchar2list (таблица varchar2 ) в качестве параметров ввода. ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call to...
CREATE PROCEDURE inputTransaction( В transaction_type VARCHAR(255), В id_product INT, IN purchase_quantity INT ) ЯЗЫК SQL НЕ ДЕТЕРМИНИРОВАННЫЙ СОДЕРЖИТ SQL ОПРЕДЕЛИТЕЛЬ БЕЗОПАСНОСТИ SQL КОММЕНТАРИЙ...
Я пытаюсь создать тестовое приложение, которое будет передавать массив объектов (в моем случае сотрудников) в хранимую процедуру Oracle.
Когда я вызываю ExecuteReader при вызове процедуры получаю ошибку