2012-03-14 4 views
1

春JdbcTemplateで、Javaからは、春JdbcTemplateで、JavaからAS400/DB2のストアドプロシージャにアクセスしようとしている

XmlBeanFactory beanFactory2 = new XmlBeanFactory(new ClassPathResource(
       "datasource_as400.xml")); 
     DataSource ds2 = (DataSource) beanFactory2.getBean("dataSource"); 

     jdbc2 = new JdbcTemplate(ds2); 

     jdbc2.update("{CALL TESTONE(?)}", new Object[] { new String("JOHN") }); 

をAS400/DB2のストアドプロシージャにアクセスしようとすると、私は次のエラー

[DEBUG,SQLErrorCodeSQLExceptionTranslator] Translating SQLException with SQL state '42704', error code '-204', message [[SQL0204] TESTONE in type *N not found.]; SQL was [{CALL TESTONE(?)}] for task [PreparedStatementCallback] 
[FATAL,MainBatch] processDonations(): org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [{CALL TESTONE(?)}]; nested exception is java.sql.SQLException: [SQL0204] TESTONE in type *N not found. 

答えて

3
を取得しています

iSeries Info Centerによると、SQLCODE -204は、An undefined object or constraint name was detected.

を指定する必要があります。 (I.E.、CALL YOUR_SCHEMA.TESTONE(?))。

別のプログラムで動作する場合(または手動でクエリする場合)は、スキーマのパスが別に設定されている可能性があります。 SELECT CURRENT_SCHEMA FROM SYSIBM.SYSDUMMY1で確認できます(SYSIBM.SYSDUMMY1がiSeriesにあるかどうか、またはダミー・テーブルの別の名前があるかどうかはわかりません...私はz/OSまたはLinux/Unix/Windows DB2に慣れています)。

+0

私はスキーマを追加しようとしましたが、それは助けになりません – SJS

+0

もう一つのアイデアはおそらくあなたのプロシージャは、特定のデータ型が来ることを期待している、そして春は別のタイプとしてそれを送信していますか?この場合、パラメータに 'CAST(?AS type)'を追加することができます。時には、DB2はプロシージャー内のデータ・タイプについて厄介なことがあります。 – bhamby

+0

ガラドールにも感謝しました:( – SJS

関連する問題