Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách gọi Hàm hoặc Thủ tục Oracle bằng Hibernate (EntityManager) hoặc JPA

Hàm Oracle hoặc một thủ tục được lưu trữ có thể được gọi bằng EntityManager theo cách sau.

Đối với hàm Oracle

Tạo một hàm với sys_refcursor làm kiểu trả về

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;

Trong lớp Thực thể, xác định hàm là

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

Đối với thủ tục được lưu trữ của Oracle

Tạo thủ tục với sys_refcursor dưới dạng tham số OUT đầu tiên

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||'%');

Trong lớp Thực thể, định nghĩa thủ tục là

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

và cuối cùng trong hàm hoặc thủ tục gọi lớp DAO dưới dạng

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

Cảm ơn



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle dbms_job.submit:Trộn Đồng bộ và Không đồng bộ

  2. Định nghĩa cột không tương thích với định nghĩa cột được phân nhóm

  3. truy vấn oracle với một số điều kiện lọc

  4. Truy vấn SQL để tìm nạp OrderID, transactionID, Trạng thái dựa trên trạng thái giao dịch là Char

  5. Hàm SYSTIMESTAMP trong Oracle