ODBC Error "Столбец x в таблице y имеет значение, превышающее его максимальную длину или точность"

Я получаю эту ошибку из базы данных Progress при выполнении следующего запроса с использованием ODBC:

SELECT distinct Table.column,
 { fn CONVERT(SUBSTRING(Table.ProblematicColumn, 1, 60), SQL_VARCHAR)} as test
FROM PUB.Table
WHERE ( Table.id IN (
 SELECT Table.id
 FROM PUB.Table
 ) )

Я знаю, что это можно исправить, используя DBTools. Тем не менее, я запускаю запросы против нескольких баз данных Progress для нескольких клиентов, поэтому делать это не всегда бывает каждый раз. Кроме того, по какой-то причине клиент ODBC, который я использую (PHP), не обнаруживает ошибок, когда это происходит. Вместо этого он возвращает пустой результат.

Преобразование, которое я сделал в VAR_CHAR с 60 символами, помогло, пока я не добавил дополнительный запрос. Когда подзапрос есть, я получаю снова ту же ошибку.

Интересно, что, когда "отличных" нет, он работает. Но мне нужны разные.

Изменение: вопрос в том, как я могу выполнить этот запрос без фиксации столбца width с помощью DBTool.

2 ответа

Потребовалось несколько минут, чтобы найти ответ. Проблема заключается в том, что в брокере SQL OE10 не обрабатывается дополнительный выбор в предложении where. Эта альтернатива, использующая внутреннее соединение для выбора sub, выглядит эквивалентно мне. Я тестировал его, он работает. Замена SQL-клиента ничего не сделает, ошибка возникает в брокере OpenEdge SQL: я получаю ту же ошибку, используя драйвер OpenEdge JDBC.

SELECT distinct Table.column,
 { fn CONVERT(SUBSTRING(Table.ProblematicColumn, 1, 60), SQL_VARCHAR)} as test
FROM PUB.Table inner join (select id from PUB.Table) t2 on Table.id = t2.id


Обновление до OE 11.6.

В разделе 11.6 есть опции для автоматического и бесшумно обрезания данных, чтобы вы не получили ошибку.

"Обновление автономной схемы"

https://community.progress.com/community_groups/openedge_rdbms/f/18/t/19534

licensed under cc by-sa 3.0 with attribution.