Я написал функцию для преобразования даты в штамп времени Unix. Функция записывается для работы независимо от текущего состояния DST (например, EST или EDT). Это функция:Невозможно получить информацию о часовом поясе при использовании mod_plsql?
function unix_time_from_date(in_date in date) return number
as
ut number := 0;
tz varchar2(8) := '';
begin
-- Get the local timezone from the passed in date
-- Assuming the date supplied is for the local time zone
select
extract(
timezone_abbr from cast(in_date as timestamp with local time zone)
)
into tz
from dual;
-- Get the Unix timestamp
select
(new_time(in_date, tz, 'GMT') - to_date('01-JAN-1970', 'DD-MM-YYYY')) * (
86400)
into ut
from dual;
return ut;
end unix_time_from_date;
Эта функция отлично работает, когда я выполняю ее от клиента, такого как JDeveloper. Из того, что я собираю, это потому, что клиент передает информацию о часовом поясе в первый запрос. Однако, если я использую функцию из процедуры, вызванной с страницы mod_plsql, я получаю ошибку ORA-01857: not a valid time zone
. Эта ошибка выбрасывается из функции new_time
, потому что tz
установлен в 'UNK'
.
Итак, я осуществил работы вокруг этой проблемы следующим образом:
function unix_time_from_date(in_date in date) return number
as
ut number := 0;
tz varchar2(8) := '';
begin
-- Get the local timezone from the passed in date
-- Assuming the date supplied is for the local time zone
select
extract(
timezone_abbr from cast(in_date as timestamp with local time zone)
)
into tz
from dual;
if tz = 'UNK' then
select
extract(
timezone_abbr from cast(sysdate as timestamp with local time zone)
)
into tz
from dual;
end if;
-- Get the Unix timestamp
select
(new_time(in_date, tz, 'GMT') - to_date('01-JAN-1970', 'DD-MM-YYYY')) * (
86400)
into ut
from dual;
return ut;
end unix_time_from_date;
Кроме этого, это все еще терпит неудачу с tz
быть установлен в 'UNK'
. Кто-нибудь знает, что может происходить здесь? Почему я не могу получить аббревиатуру локального часового пояса при вызове функции из процесса Oracle Application Server?
Выполнение этих запросов через sqlplus на сервере OAS, как пользователь, обслуживающий веб-страницы, не приводит к ошибкам. –