Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да извикате функция или процедура на Oracle с помощта на Hibernate (EntityManager) или JPA

Oracle функция или съхранена процедура може да бъде извикана чрез EntityManager по следния начин.

За функция Oracle

Създайте функция със sys_refcursor като тип връщане

CREATE OR REPLACE FUNCTION my_function
(p_val IN varchar2)
    RETURN SYS_REFCURSOR
  AS
    my_cursor SYS_REFCURSOR;
  BEGIN
    OPEN my_cursor FOR SELECT emp_name FROM employees
    WHERE lower(emp_name) like lower(p_val||'%');
    RETURN my_cursor;    
  END;

В клас Entity дефинирайте функция като

@javax.persistence.NamedNativeQuery(name = "getFunc", query = "{? =  call
my_function(:empName) }", resultClass = Employee.class, hints = {
@javax.persistence.QueryHint(name = "org.hibernate.callable", value = "true") })

За съхранена процедура на Oracle

Създайте процедура с sys_refcursor като първи OUT параметър

CREATE OR REPLACE PROCEDURE myProcedure(p_cursor out sys_refcursor,
     p_val  in varchar2
)
 AS
BEGIN
     OPEN o_cursor FOR
          SELECT     emp_name 
             FROM     employees 
            WHERE     LOWER (emp_name) LIKE lower(p_val||'%');

В клас Entity дефинирайте процедура като

@javax.persistence.NamedNativeQuery(name = "getProc", query = "{ call
my_procedure(?,:empName) }", resultClass = Employee.class, hints = {
@javax.persistence.QueryHint(name = "org.hibernate.callable", value = "true") })

и накрая в DAO клас извикване на функция или процедура като

Query query = entityManager.createNamedQuery("getFunc"); // if procedure then getProc 
query.setParameter("empName","smith"); 
query.getResultList(); 

Благодаря



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да съхраня резултат от функция, която ще върне sysrefcursor?

  2. зареждане на огромни XLS данни в Oracle с помощта на python

  3. Заявка за намиране на пълни сканирания на таблицата в oracle

  4. Най-полезните заявки на AWR за надстройка на R12.2/R12.1

  5. Нулиране на кумулативна сума?