У меня есть относительно простой оператор выбора в программе VB6, который я должен поддерживать. (Подавить вашу естественную склонность к содроганию; я унаследовал это, я не написал).
Утверждение простое (переформатировано для ясности):
select distinct
b.ip_address
from
code_table a,
location b
where
a.code_item = b.which_id and
a.location_type_code = '15' and
a.code_status = 'R'
Данная таблица возвращает список IP-адресов из базы данных. Ключевой столбец, о котором идет речь, - code_status
. Некоторое время назад мы поняли, что один из IP-адресов больше не действителен, поэтому мы изменили его статус на I
(недействительный), чтобы исключить его появление в результатах запроса.
Когда вы выполняете запрос выше в SQL Plus или в SQL Developer, все в порядке. Но когда вы выполняете его из VB6, проверка на code_status
игнорируется, и в наборе результатов появляется неверный IP-адрес.
Моим первым предположением было то, что результаты были где-то кэшированы Но, не будучи экспертом Oracle, я понятия не имею, где искать.
Это древний код VB6. SQL встроен в приложение. На данный момент у меня нет времени переписать его как хранимую процедуру. (Мне когда-нибудь дадут возможность.) Но мне нужно знать, что вызвало бы это несоответствие в поведении и как его устранить. Если это происходит здесь, скорее всего, это происходит где-то еще.
Если кто-нибудь может предложить хорошее место, чтобы посмотреть, я был бы очень признателен.