У меня есть скрипт для создания сохраненной функции.
CREATE OR REPLACE TYPE OBJ_EMPL AS OBJECT
(
employeeID NUMBER(19,0),
address VARCHAR2(100 CHAR),
first_Name VARCHAR2(50 CHAR),
last_Name VARCHAR2(50 CHAR)
);
CREATE OR REPLACE TYPE LIST_OBJ_EMPL IS TABLE OF OBJ_EMPL;
CREATE OR REPLACE FUNCTION GET_ALL_EMPLOYEES RETURN LIST_OBJ_EMPL IS
varObjEmpl LIST_OBJ_EMPL;
BEGIN
SELECT OBJ_EMPL (
employeeID,
first_Name,
last_Name,
address
)
BULK COLLECT INTO varObjEmpl
FROM EMPLOYEES;
RETURN varObjEmpl;
EXCEPTION
WHEN NO_DATA_FOUND THEN
return NULL;
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END GET_ALL_EMPLOYEES;
/
--SELECT * FROM TABLE(getListEmployees);
/*
CREATE TABLE EMPLOYEES
(EMPLOYEEID NUMBER(19,0) NOT NULL ENABLE,
ADDRESS VARCHAR2(100 CHAR),
FIRST_NAME VARCHAR2(50 CHAR),
LAST_NAME VARCHAR2(50 CHAR),
CONSTRAINT PK_EMPLOYEEID PRIMARY KEY (EMPLOYEEID)
);
*/
@Entity
@Table(name = "employees")
@NamedStoredProcedureQueries({
@NamedStoredProcedureQuery(name = "getListEmployees",
procedureName = "get_all_employees",
resultClasses = Employee.class)
})
public class Employee {
@Id
@SequenceGenerator(name = "jpaSequence.Employee",
sequenceName = "SEQUENCE_EMPLOYEE",
allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "jpaSequence.Employee")
@Column(name = "employeeID")
private Long employeeID;
@Column(name = "first_Name")
@Size(message = "Field 'firstName' can't be более {} ",max = 50)
private String firstName;
@Column(name = "last_Name")
@Size(message = "Field 'firstName' can't be более {} ",max = 50)
private String lastName;
@Column(name = "address")
@Size(message = "Field 'firstName' can't be более {} ",max = 100)
private String address;
public Employee() {
}
public interface EmployeesRepository
extends CrudRepository<Employee, Long>,
EmployeesRepositoryCustom {
}
public interface EmployeesRepositoryCustom {
List<Employee> getAllEmployees();
}
@Repository
public class EmployeesRepositoryImpl implements EmployeesRepositoryCustom {
@PersistenceContext
private EntityManager entityManager;
@Override
public List<Employee> getAllEmployees() {
StoredProcedureQuery getAllEmployees =
entityManager.createNamedStoredProcedureQuery("getListEmployees");
return getAllEmployees.getResultList();
}
}
Когда я пытаюсь получить данные, у меня возникает исключение.
Ошибка вызова CallableStatement.getMoreResults; SQL [get_all_employees]; вложенное исключение: org.hibernate.exception.SQLGrammarException: ошибка вызова CallableStatement.getMoreResults
java. sql .SQLException: ORA-06550: строка 1, столбец 7: PLS-00221: «GET_ALL_EMPLOYEES» - это не процедура или не определена ORA-06550: строка 1, столбец 7: PL / SQL: оператор игнорируется
Возможно, вы не можете использовать аннотации @ NamedStoredProcedureQuery для работать с сохраненными функциями? Я не знаю что делать У кого есть идеи?