2015-09-14 2 views
0

Я пытаюсь вставить полигон в db2 стол, размещенный на г/OS Это моя база данных Пункт WriterSpring Batch обновление DB2 DB2GSE.ST_POLYGON терпит неудачу

<bean id="databaseItemWriter" 
    class="org.springframework.batch.item.database.JdbcBatchItemWriter"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="sql"> 
     <value> 
     <![CDATA[   
      INSERT INTO SAMPLE_GEOMETRIES 
        (GEO_NAME, GEOMETRY) 
      VALUES 
        (?, DB2GSE.ST_POLYGON(?, 1)) 
     ]]> 
     </value> 
    </property> 

    <property name="itemPreparedStatementSetter"> 
     <bean class="com.amex.elbs.DAO.GeometriesItemPreparedStatementSetter" /> 
    </property> 
</bean> 

Это мой обычай подготовил заявление сеттер

класс GeometriesItemPreparedStatementSetter общественность реализует ItemPreparedStatementSetter {

@Override 
public void setValues(Geometries item, PreparedStatement ps) throws SQLException { 
    ps.setString(1, item.Id); 
    ps.setString(2, item.Polygon); 
} 

}

Это мой примерный входной файл. Он ограничен линией и имеет идентификатор и координаты многоугольника.

pm251|'POLYGON((-159.335174733889 21.9483433404175,-159.327130348878 22.0446395507162,-159.295025589769 22.1248124949548,-159.343195828355 22.1970166285359,-159.391366885913 22.2291198667724,-159.576012589057 22.2131796383001,-159.712505933171 22.1490592515515,-159.800814224332 22.0366665967853,-159.736592652746 21.9644203111023,-159.640246973766 21.9483657695954,-159.576021285803 21.8841361312636,-159.439545188912 21.8680716835921,-159.335174733889 21.9483433404175))', 1 

Приведенный ниже оператор при выполнении на z/OS является успешным.

,INSERT,INTO SAMPLE_GEOMETRIES 
    (GEO_NAME, GEOMETRY) 
    VALUES 
    ('PM', 
    DB2GSE.ST_POLYGON('POLYGON((
     -159.335174733889 21.9483433404175, 
     -159.327130348878 22.0446395507162, 
     -159.295025589769 22.1248124949548, 
     -159.343195828355 22.1970166285359, 
     -159.391366885913 22.2291198667724, 
     -159.576012589057 22.2131796383001, 
     -159.712505933171 22.1490592515515, 
     -159.800814224332 22.0366665967853, 
     -159.736592652746 21.9644203111023, 
     -159.640246973766 21.9483657695954, 
     -159.576021285803 21.8841361312636, 
     -159.439545188912 21.8680716835921, 
     -159.335174733889 21.9483433404175))',1)) 
---------+---------+---------+---------+--------- 
DSNE615I NUMBER OF ROWS AFFECTED IS 1 

Это то, что я получаю, когда я исполняю

Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-245, SQLSTATE=428F5, SQLERRMC=DB2GSE.ST_POLYGON, DRIVER=4.12.55 
    at com.ibm.db2.jcc.am.hd.a(hd.java:676) 
    at com.ibm.db2.jcc.am.hd.a(hd.java:60) 
    at com.ibm.db2.jcc.am.hd.a(hd.java:127) 
    at com.ibm.db2.jcc.am.mn.c(mn.java:2621) 
    at com.ibm.db2.jcc.am.mn.d(mn.java:2609) 
    at com.ibm.db2.jcc.am.mn.a(mn.java:2085) 
    at com.ibm.db2.jcc.am.nn.a(nn.java:7054) 
    at com.ibm.db2.jcc.am.mn.a(mn.java:2062) 
    at com.ibm.db2.jcc.t4.cb.g(cb.java:136) 
    at com.ibm.db2.jcc.t4.cb.a(cb.java:41) 
    at com.ibm.db2.jcc.t4.q.a(q.java:32) 
    at com.ibm.db2.jcc.t4.rb.i(rb.java:135) 
    at com.ibm.db2.jcc.am.mn.ib(mn.java:2055) 
    at com.ibm.db2.jcc.am.nn.rc(nn.java:3219) 
    at com.ibm.db2.jcc.am.nn.s(nn.java:3370) 
    at com.ibm.db2.jcc.am.nn.l(nn.java:2499) 
    at com.ibm.db2.jcc.am.nn.addBatch(nn.java:2438) 
    at org.springframework.batch.item.database.JdbcBatchItemWriter$1.doInPreparedStatement(JdbcBatchItemWriter.java:190) 
    at org.springframework.batch.item.database.JdbcBatchItemWriter$1.doInPreparedStatement(JdbcBatchItemWriter.java:185) 
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:644) 
    ... 28 more 
+0

Ты говоришь, что был успешным с SPUFI (или что-то еще, если что?), Чтобы проверить SQL? А потом не удалось выполнить его из программы? Вы проверили сообщение/код, https://www-304.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/com.ibm.db2z10.doc.codes/src/tpc/n245.dita, и можете ли вы сделать что-нибудь из этого? –

+0

Я попробую удалить '' quote; 'ps.setString()' должен сделать это автоматически –

ответ

0

error message for SQLCODE -245 гласит: «призывание рутинного имя-функции неоднозначен».

По-видимому, существует более одной версии DB2GSE.ST_POLYGON в базе данных, принимающих различные аргументы. Вы используете маркер неизученного параметра: DB2GSE.ST_POLYGON(?, 1), поэтому DB2 не может определить, какую версию DB2GSE.ST_POLYGON вы хотите.

Добавить явное приведение к функции invokation, используя соответствующий тип данных, например:

DB2GSE.ST_POLYGON(CAST(? AS VARCHAR(1000)), 1) 
+0

Теперь я получаю другую ошибку. Ошибка из Spring Batch - вызвана: com.ibm.db2.jcc.am.BatchUpdateException: [jcc] [t4] [102] [10040] [4.12.55] Пакетный сбой ERRORCODE = -4229, SQLSTATE = null. Я вижу ошибку 1 в журналах DB2, но я не уверен, связано ли это с этим - Ошибка из журналов DB2 - «SQLCODE = -254, ОШИБКА: НЕПРАВИЛЬНОЕ ЗАЯВЛЕНИЕ ВНУТРЕННЕГО ВСТАВКИ ДЛЯ ПРОЦЕССА МНОЖЕСТВЕННЫХ РЯДОВ ДАННЫХ, НО ОШИБКИ ВОЗНИКАЮТСЯ ". – FlyTheWorld

+0

Я написал еще одну хранимую процедуру для этого же обновления, и я тоже получил этот SQLCODE = -245. Теперь, когда я добавил CAST, SP работал. Поэтому я думаю, что эта новая ошибка - это что-то из Spring Batch – FlyTheWorld

Смежные вопросы