2017-07-19 40 views
0

hibernateからoracle表への挿入操作を実行しようとしています。 私のストアドプロシージャは、次のとおりです。 -ストアド・プロシージャ(oracle)のパラメータとして日付を渡します。

create or replace PROCEDURE   ADMSN_TABLE (
    P_ID       NUMBER, 
    P_ADMISSIONFOR     VARCHAR2, 
    P_SUBMISSIONDATE    DATE,       --NOT NULL 
    P_SUBMISSIONLASTDATE   DATE       --NOT NULL 

) 
IS 
    v_sno number; 

    BEGIN 
     INSERT INTO ORACLE.ADMISSION(AMSNID,ADMISSIONFOR,SUBMISSIONDATE, 
SUBMISSIONLASTDATE) 
     VALUES (P_ID,P_ADMISSIONFOR,P_SUBMISSIONDATE,P_SUBMISSIONLASTDATE); 

     COMMIT; 
    END; 

私は休止状態からこのプロシージャをコールしています方法: -

public void callProc(){ 

     Date utilDate= new Date(); 
     java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); 
     System.out.println(sqlDate); 


     Date date = new Date(); 
     SimpleDateFormat smd = new SimpleDateFormat("dd-MMM-YYYY"); 
     String sdate = smd.format(date); 
     System.out.println(sdate); 

    try { 
    session = sessionFactory.openSession(); 
    transaction = session.beginTransaction(); 
    StoredProcedureQuery query = session.createStoredProcedureQuery("ADMSN_TABLE"); 
query.registerStoredProcedureParameter("P_ID", Number.class, 
ParameterMode.IN); 
query.registerStoredProcedureParameter("P_ADMISSIONFOR", String.class, 
ParameterMode.IN); 
query.registerStoredProcedureParameter("P_SUBMISSIONDATE", Date.class, 
ParameterMode.IN);    
query.registerStoredProcedureParameter("P_SUBMISSIONLASTDATE",Date.class, 
ParameterMode.IN); 

      query.setParameter("P_ID", 1); 
      query.setParameter("P_ADMISSIONFOR", "schoolfee"); 
      query.setParameter("P_SUBMISSIONDATE", sqlDate); 
      query.setParameter("P_SUBMISSIONLASTDATE", sqlDate); 
      query.execute(); 
      System.out.println("excuted"); 
     }catch(Exception ex){ 
      ex.printStackTrace(); 
     } 
    } 
} 

今私は、上記のようnew Date()またはsqldateとして日付パラメータを渡そうとしました。そしてquery.setParameter("P_SUBMISSIONLASTDATE", sqlDate,TemporalType.Date);が、それらのすべてがエラーを投げている: -

Caused by: org.hibernate.exception.SQLGrammarException: 
Error calling CallableStatement.getMoreResults at 
org.hibernate.exception.internal.SQLStateConversionDelegate.convert 
(SQLStateConversionDelegate.java:106) at 
org.hibernate.exception.internal.StandardSQLExceptionConverter.convert 
(StandardSQLExceptionConverter.java:42) at 
org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert 
(SqlExceptionHelper.java:111) 
at org.hibernate.result.internal.OutputsImpl.convert 
at org.hibernate.result.internal.OutputsImpl.<init> 
(OutputsImpl.java:55) 
at org.hibernate.procedure.internal.ProcedureOutputsImpl.<init> 
(ProcedureOutputsImpl.java:32) 
at org.hibernate.procedure.internal.ProcedureCallImpl.buildOutputs 
(ProcedureCallImpl.java:453) 
at org.hibernate.procedure.internal.ProcedureCallImpl.getOutputs 
(ProcedureCallImpl.java:404) 
    at org .hibernate.procedure.internal.ProcedureCallImpl.outputs 
(ProcedureCallImpl.java:663) 
    at org.hibernate.procedure.internal.ProcedureCallImpl.execute 
(ProcedureCallImpl.java:646) 
    ... 41 more 
Caused by: java.sql.SQLException: ORA-06550: line 1, column 7: 
PLS-00306: wrong number or types of arguments in call to 'ADMSN_TABLE' 
ORA-06550: line 1, column 7: 
PL/SQL: Statement ignored 

答えて

0

一つの可能​​な解決策ではなく、java.sql.Dateのをjava.sql.Timestampを使用することです。また、正しいデータ型マッピングを確認するためにSQL and PL/SQL Mappings to Oracle and JDBC Typesを参照することもできます。

This is an example of how get java.sql.timestamp

java.util.Date utilDate = new java.util.Date(); 
Calendar cal = Calendar.getInstance(); 
cal.setTime(utilDate); 
cal.set(Calendar.MILLISECOND, 0); 
System.out.println(new java.sql.Timestamp(utilDate.getTime())); 
System.out.println(new java.sql.Timestamp(cal.getTimeInMillis())); 
関連する問題