Hello,
the reason for the ConversionExceptionSapDB is a bug in the database kernel.
DBProcedures return DATE and TIMESTAMP values always in internal format. But
the JDBC-driver expects the ANSI format and throws an exception. Until the
bug is fixed the following DBProcedure shows a workaround for the error: 

CREATE DBPROC protocole_get_date_invent(IN protocole INTEGER, OUT dateinvent
VARCHAR(10))
  AS SELECT MAX(CHAR(dateinvent,ISO)) FROM DUMMY.DBProcGetDate where
protocole=:protocole;
  FETCH INTO :dateinvent;

Now the DBProcedure has a VARCHAR(10) output value instead of a DATE. The
function CHAR(date,ISO) converts the date value into a String representing
the date value in ANSI-format. You do not have to change the JAVA-code, the
getDate() in your code snippet below works also with the modified
DBProcedure.

Regards,
Marco
----------------------------------------------
Marco PASKAMP
SAP DB, SAP Labs Berlin

> -----Original Message-----
> From: Thomas Cataldo [mailto:[EMAIL PROTECTED]]
> Sent: Mittwoch, 27. Februar 2002 11:03
> To: sapdb.general
> Subject: jdbc and stored procs
> 
> 
> Hi,
> 
> I've got this simple stored proc:
> 
> CREATE DBPROC protocole_get_date_invent(IN protocole INTEGER, OUT 
> dateinvent DATE) AS
> 
> SELECT MAX(dateinvent) FROM DUMMY.inventaire where 
> protocole=:protocole;
> FETCH INTO :dateinvent;
> 
> 
> And this method in java:
> 
>      public Date getDateInvent() throws RemoteException {
>       try {
>           makeConnection();
>       } catch (Exception ex) {
>           throw new EJBException("Unable to connect to database. " + 
> ex.getMessage());
>       }
>       try {
>           CallableStatement cs = con.prepareCall("CALL 
> protocole_get_date_invent(?, ?)");
>           cs.registerOutParameter(2, Types.DATE);
>           cs.setInt(1, id.intValue());
>           System.out.println("Running get_date_invent...");
>           cs.execute();
>           System.out.println("[OK]");
>           con.commit();
>           // get return value from stored proc
>           return cs.getDate(2);
>       } catch (Exception e) {
>           throw new RemoteException(e.toString());
>       } finally {
>           try { con.close(); } catch (Exception e) { }
>       }
>      }
> 
> 
> I get the following exeception:
> Exception in thread "main" java.rmi.ServerException: RemoteException 
> occurred in server thread; nested exception is:
>       javax.transaction.TransactionRolledbackException: 
> com.sap.dbtech.jdbc.translators.ConversionExceptionSapDB: 
> Cannot convert 
> '20020210' to Date; nested exception is:
>       java.rmi.RemoteException: 
> com.sap.dbtech.jdbc.translators.ConversionExceptionSapDB: 
> Cannot convert 
> '20020210' to Date
> 
> 
> 20020210 is the value I'm expecting. dateinvent is an sql date in the 
> inventaire table.
> 
> Thanks in advance,
> Tom.
> 
> _______________________________________________
> sapdb.general mailing list
> [EMAIL PROTECTED]
> http://listserv.sap.com/mailman/listinfo/sapdb.general
> 
_______________________________________________
sapdb.general mailing list
[EMAIL PROTECTED]
http://listserv.sap.com/mailman/listinfo/sapdb.general

Reply via email to