sql >> データベース >  >> RDS >> Oracle

Hibernate(EntityManager)またはJPAを使用してOracle関数またはプロシージャを呼び出す方法

    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;
    

    エンティティクラスで、関数を次のように定義します

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

    エンティティクラスで、プロシージャを次のように定義します

    @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. PHPフォームの投稿でチェックボックスをオンにしましたか?

    2. オプションの要素を使用してxmlを解析する方法

    3. SQLite GLOB

    4. 他の列の値に応じて、SQL SELECTORDERBY複数の列