На моем рабочем месте есть приложение .net, поставляемое нам почтовой службой, оно подключается к базе данных oracle, работающей на том же компьютере, и отвечает за регистрацию, хранение и печать отгрузочных этикеток.
Так как хост базы данных и т. Д. Настраивается, мы спросили компанию, можно ли использовать приложение по сети (простое копирование на другой компьютер привело к ошибкам «литерал не соответствует строке формата»), все, что нам сказали это «это невозможно». Не желая принимать ответ «нет», я осмотрел exe с отражателем.
Вместе с представлением Oracle v $ sqlarea я определил ошибки в нескольких функциях сравнения дат, но я понятия не имею, почему приложение работало в первую очередь на исходной машине.
Исходное приложение использует запросы, аналогичные
SELECT * FROM shipping WHERE date = '2011/03/28' --error
легко исправляется чем-то вроде
SELECT * FROM shipping WHERE to_char(date, 'yyyy/mm/dd') = '2011/03/28'
Почему оригинальное приложение работает без каких-либо ошибок? Неверный запрос появляется в представлении v $ sqlarea, когда приложение используется на исходном хосте, если я копирую запрос и запускаю его вручную, используя все остальное, он выдает ошибку, если я запускаю приложение на любом другом компьютере, который выдает ошибка тоже, есть ли в Oracle какой-то параметр, который изменяет запросы на лету, но только для запросов, исходящих с локального компьютера, при сохранении исходного запроса в v $ sqlarea?