2016-08-31 5 views
1

これは私がHibernateで起動しようとしている手順です。Hibernateを呼び出すストアドプロシージャは、有効な関数またはプロシージャ名のエラーを返しません。

PROCEDURE CSR_GET_BUSINS_UNIT_EXP(
         v_start_year VARCHAR2, 
         v_end_year VARCHAR2, 
         c_bus_total OUT cursor_output, 
         c_bus_month_total OUT cursor_output, 
         c_bus_unit_info OUT cursor_output, 
         c_bus_exp_info OUT cursor_output 
        ) AS 
    BEGIN 
     OPEN c_bus_total FOR 
      SELECT NVL(SUM(amount),0) 
      FROM TIPS_BUS_UNIT 
      WHERE ACCT_PER <= TO_DATE(v_start_year,'dd-mon-yyyy') 
      AND ACCT_PER >= TO_DATE(v_end_year,'dd-mon-yyyy'); 
     OPEN c_bus_month_total FOR 
      SELECT TO_CHAR(acct_per,'MON-YYYY'), NVL(SUM(amount),0) 
       FROM TIPS_BUS_UNIT 
       WHERE ACCT_PER <= TO_DATE(v_start_year,'dd-mon-yyyy') 
       AND ACCT_PER >= TO_DATE(v_end_year,'dd-mon-yyyy') 
       GROUP BY acct_per 
       ORDER BY acct_per DESC; 
     OPEN c_bus_unit_info FOR 
      SELECT TIPS_BUNIT, NVL(SUM(amount),0) 
       FROM TIPS_BUS_UNIT 
       WHERE ACCT_PER <= TO_DATE(v_start_year,'dd-mon-yyyy') 
       AND ACCT_PER >= TO_DATE(v_end_year,'dd-mon-yyyy') 
       GROUP BY TIPS_BUNIT 
       ORDER BY TIPS_BUNIT DESC; 
     OPEN c_bus_exp_info FOR 
       SELECT TIPS_BUNIT, TO_CHAR(acct_per,'MON-YYYY'), amount 
      FROM TIPS_BUS_UNIT 
      WHERE ACCT_PER <= TO_DATE(v_start_year,'dd-mon-yyyy') 
      AND ACCT_PER >= TO_DATE(v_end_year,'dd-mon-yyyy') 
      ORDER BY TIPS_BUNIT DESC, ACCT_PER DESC; 
    END; 

以下は私の手続きin.settersとgettersを定義した私のPOJOです。

@NamedNativeQueries({`@NamedNativeQuery(
     name = "callBusinessUnitProcedure",`enter code here` 
     query = "CALL CSR_GET_BUSINS_UNIT_EXP(:v_start_year,:v_end_year)", 
     resultClass = Company.class`) 
    }) 
    @Entity 
    @Table(name="TIPS_BUS_UNIT",schema ="CSR") 
    public class Company implements Serializable{ 
    @Column(name = "TIPS_BUNIT") 
     @Id 
     @JsonProperty(value="businessUnit") 
     private String businessUnit; 

     @Column(name = "BUS_UNIT_DESC") 
     @JsonProperty(value="description") 
     private String description; 

     @Column(name = "ACCT_PER") 
     @JsonProperty(value="date") 
     private String date; 

     @Column(name = "AMOUNT") 
     @JsonProperty(value="amount") 
     private String amount; 

以下は私のIMPLクラスです。ここで私はストアドプロシージャを呼び出してデータベースをヒットします。

@SuppressWarnings("unchecked") 
     @Override 
     public List<Company> getWebReports() 
     { 

      List<Company> webReport = new ArrayList<Company>(); 


      webReport = entityManager 
        .createNamedQuery("callBusinessUnitProcedure").setParameter("v_start_year","07-OCT-2007") 
        .setParameter("v_end_year", "06-JAN-2006").getResultList(); 
      return webReport; 

これを実行すると、以下のエラーがコンソールに表示されます。 誰がこの種の問題に直面している場合は助けてください...

2016-08-30 21:59:13.516 INFO 11884 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet  : FrameworkServlet 'dispatcherServlet': initialization completed in 56 ms 
Hibernate: CALL CSR_GET_BUSINS_UNIT_EXP(?,?) 
2016-08-30 21:59:15.199 WARN 11884 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 6576, SQLState: 65000 
2016-08-30 21:59:15.199 ERROR 11884 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : ORA-06576: not a valid function or procedure name 

2016-08-30 21:59:15.269 ERROR 11884 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[`dispatcherServlet`] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract Result Set; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract Result Set] with root cause 

java.sql.SQLException: ORA-06576: not a valid function or procedure name 
+0

これは非常に複雑なストアドプロシージャのように聞こえます。 Oracleにこれをさせるのではなく、Javaコードを使用して文字列をSQL互換時刻に変換するのはなぜですか?また、ストアドプロシージャ内でカーソルを開くことはありますが、それらを悪用することはありませんか? – fge

答えて

0
は)

{ ( @NamedNativeQuery( name = "callBusinessUnitProcedure", query = "{CALL CSR_GET_BUSINS_UNIT_EXP(:v_start_year,:v_end_year)}", resultClass = Company.classここにコードを入力してください)}それ

@NamedNativeQueriesに{}を持っているあなたのnamednativeクエリを変更

これを確認してくださいhttps://stackoverflow.com/a/26381638/258741

関連する問題