Если столбец объявлен как TIMESTAMP, а не, скажем, TIMESTAMP с зоной времени или TIMESTAMP с локальной зоной времени, отметка времени, которая хранится в таблице, не будет иметь компонента часового пояса. В результате SYS_EXTRACT_UTC преобразует временную метку в UTC, используя часовой пояс сеанса, который контролируется клиентом и может отличаться на разных клиентских компьютерах. Я подозреваю, что если вы запустите
SELECT SessionTimeZone
FROM dual;
из приложения OCCI и из сеанса SQL * Plus, в результате которого вы получите разные результаты, из-за которых возвращаемые строки будут другими.
Если вы хотите, чтобы возвращаемая строка не зависела от клиентского компьютера, я бы посоветовал сохранить часовой пояс в столбце базы данных. Изменяет ли определение схемы использование TIMESTAMP WITH TIME ZONE? За исключением этого, вы можете убедиться, что на каждом клиентском компьютере настроен одинаковый часовой пояс, и / или запустить явную ALTER SESSION, т. Е.
ALTER SESSION
SET time_zone = '-05:00';
в хранимой процедуре, чтобы гарантировать, что преобразование всегда выполняется из определенного часового пояса.