Я попробовал приведенный ниже код, но получаю «Недопустимая ошибка типа данных».
Ниже приведен фрагмент кода, через который я вызвал хранимую процедуру и передав строку и список в качестве аргумента.
StoredProcedure sp = session.createStoredProcedure("DIGX_HOST_BRANCH_ACCOUNT_SYNC.HOST_BRANCH_ACCOUNT_SYNC");
sp.registerParameter("target_unit", String.class, PARAMETER_MODE.IN);
sp.registerParameter("hostaccounts", List.class, PARAMETER_MODE.IN);
sp.setParameter("target_unit", entity);
sp.setParameter("hostaccounts", branchAccounts.getHostBrachAccounts());
sp.execute();
session.close();
Сначала я создал тип и упомянул соответствующие атрибуты
create or replace type HostBranchAccount as object (
partyId varchar2(50),
accountNumber varchar2(50),
oldBranchID varchar2(50),
newBranchID varchar2(50)
);
create or replace type HostBranchAccountListResponse as table of HostBranchAccount;
create or replace PACKAGE DIGX_HOST_BRANCH_ACCOUNT_SYNC AS
END DIGX_HOST_BRANCH_ACCOUNT_SYNC;
/
hostaccounts - это тип, который я использую в хранимой процедуре в качестве параметра IN.
create or replace PACKAGE BODY DIGX_HOST_BRANCH_ACCOUNT_SYNC IS
PROCEDURE HOST_BRANCH_ACCOUNT_SYNC (target_unit IN VARCHAR2, hostaccounts IN HostBranchAccountListResponse)
IS
BEGIN
FOR I in 1 .. hostaccounts.count loop
UPDATE digx_am_account_exception set ACCOUNT_NUMBER = hostaccounts(I).newBranchID || hostaccounts(I).accountNumber
where ACCOUNT_NUMBER = hostaccounts(I).oldBranchID || hostaccounts(I).accountNumber and
DETERMINANT_VALUE = target_unit;
end loop;
commit;
END;
END DIGX_HOST_BRANCH_ACCOUNT_SYNC;
/
С кодом выше я получаю неверный тип столбца
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Invalid column type
Error Code: 17004
Call: BEGIN DIGX_HOST_BRANCH_ACCOUNT_SYNC.HOST_BRANCH_ACCOUNT_SYNC(target_unit=>?, hostaccounts=>?); END;
bind => [2 parameters bound]
Query: ResultSetMappingQuery()
at com.ofss.fc.infra.das.orm.eclipselink.EclipseLinkStoredProcedureWrapper.execute(EclipseLinkStoredProcedureWrapper.java:125)
... 5 more
Caused by: java.sql.SQLException: Invalid column type