Странное поведение запроса OpenEdge - PullRequest
1 голос
/ 09 сентября 2009

Недавно нам пришлось поработать с базой данных OpenEdge, которую использует сторонний продукт, и сегодня (после долгих потрясений) мы наконец-то определили, почему представление не дает результатов. Это представление объединяет около 100 отдельных таблиц, а затем запрашивается (у нас ограничены права на эту базу данных). Одно из полей, возвращаемых этим представлением, является жестко закодированным строковым литералом, следующим по

'John Smith' AS TheName

У нас были проблемы с выполнением запросов, которые включали эту строку, которую мы пытались RTrim (представление возвращало много конечных пробелов), а затем объединяли с другим полем. Однако, если мы использовали RTrim в этом поле, то вместо того, чтобы возвращать сообщение об ошибке, или ноль или что-то подобное, строка просто не возвращалась. Мы не пытались использовать его в предложении WHERE или JOIN, это было просто частью SELECT ... FROM VIEWNAME. После просмотра представления казалось, что представление ошибочно определило длину строки как 9 символов (длина не была указана в определении), и RTrim просто не работал. Теперь я могу понять, почему это может привести к сообщению об ошибке или к значению NULL в SELECT, но почему строка просто не будет возвращена вообще ? Это не похоже на хорошее поведение SQL, и я никогда не видел, чтобы это происходило с любой другой СУБД.

Прочая информация: мы тестируем запросы через ODBC и WinSQL, чтобы включить их в существующее приложение ASP.NET. У нас нет доступа к бэкэнду, кроме как через это, хотя у нас есть права на создание представлений.

Обновление: в качестве причудливого продолжения мы обнаружили, что если мы попытаемся запросить это представление без какого-либо предложения WHERE, никакие записи не будут возвращены. Это может иметь ту же причину.

Ответы [ 3 ]

1 голос
/ 09 сентября 2009

Убедитесь, что у вас нет пробелов. Обрезка не удаляет пробелы, только пробелы. Пробелы также не равны нулю. Существует разница в наборе символов, хотя в вашем редакторе он не заметно отличается. Я столкнулся с этим с несколькими базами данных, DBII, Oracle, PostGreSQL. Проверьте набор символов вашего редактора и попробуйте просмотреть таблицы, вы можете ничего не видеть или большие прямоугольники.

1 голос
/ 02 декабря 2009

Похоже, это может быть связано с SQL-WIDTH в базе данных хода выполнения. Одна из проблем с Progress заключается в том, что если содержимое поля превышает SQL-WIDTH, вы получите странное поведение SQL (иногда драйвер может завершиться с ошибкой, а иногда нет результатов).

Чтобы определить это, вам нужно использовать команду dbtool, чтобы проверить, не превышен ли SQL-WIDTH.

0 голосов
/ 09 сентября 2009

Звучит как очень странное поведение. Просто закодируйте его, выполните в приложении манипуляции с обрезкой и / или строками и продолжайте свой путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...