Banco De Dados.Guia
no Oracle Database, os fusos horários podem ser definidos em vários locais. Abaixo estão quatro maneiras de alterar o fuso horário ao usar o Oracle.
Defina o fuso horário do banco de dados
você pode definir o fuso horário do banco de dados ao criar o banco de dados. Para fazer isso, use a cláusula SET TIME_ZONE
da instrução CREATE DATABASE
.
exemplo:
CREATE DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
nesse caso, usei um nome de região de fuso horário. Veja como retornar uma lista de fusos horários válidos no Oracle Database para obter uma lista completa de nomes de regiões válidos em seu sistema.
Alternativamente, você pode usar um deslocamento de fuso horário real:
CREATE DATABASE mySampleDb...SET TIME_ZONE='+10:00';
se você não definir explicitamente o fuso horário ao criar o banco de dados, o padrão será o fuso horário do sistema operacional do servidor.
você também pode alterar a configuração de fuso horário atual para o banco de dados. Para fazer isso, use a instrução ALTER DATABASE
.
exemplo:
ALTER DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
observe que o fuso horário do banco de dados é relevante apenas para colunas TIMESTAMP WITH LOCAL TIME ZONE
. Além disso, a Oracle recomenda que você defina o fuso horário do banco de dados como UTC (0:00) para evitar a conversão de dados e melhorar o desempenho quando os dados são transferidos entre bancos de dados.
Defina o fuso horário da sessão
você pode definir o fuso horário da sessão independentemente para o fuso horário do banco de dados. Quando você retorna dados TIMESTAMP WITH LOCAL TIME ZONE
, eles são retornados no fuso horário da sessão atual.
o fuso horário da sessão também entra em vigor quando um valor TIMESTAMP
é convertido para o tipo de dados TIMESTAMP WITH TIME ZONE
ou TIMESTAMP WITH LOCAL TIME ZONE
.
você pode fazer algumas coisas para definir o fuso horário no nível da sessão.
a variável de ambiente ORA_SDTZ
você pode definir o fuso horário da sessão com a variável de ambiente ORA_SDTZ
. Esta pode ser definida com os seguintes valores:
- sistema Operacional fuso horário local (
'OS_TZ'
) - Banco de dados de fuso horário (
'DB_TZ'
) - Absoluta deslocamento do UTC (e.g.
'-04:00'
) - fuso Horário nome da região (por exemplo,
'America/St_Kitts'
)
Aqui estão alguns exemplos de configuração da variável de ambiente em um ambiente UNIX:
% setenv ORA_SDTZ 'OS_TZ'% setenv ORA_SDTZ 'DB_TZ'% setenv ORA_SDTZ 'America/St_Kitts'% setenv ORA_SDTZ '-04:00'
O valor padrão de ORA_SDTZ
variável é 'OD_TZ'
. Este valor é usado quando a variável não está definida ou é definida como um valor inválido.
a instrução ALTER SESSION
você pode alterar o fuso horário para uma sessão SQL específica com a cláusula SET TIME_ZONE
da instrução ALTER SESSION
.
TIME_ZONE
pode ser definida com os seguintes valores:
- Padrão de fuso horário local, quando a sessão foi iniciada (
local
) - Banco de dados de fuso horário (
dbtimezone
) - Absoluta deslocamento do UTC (e.g.
'-04:00'
) - fuso Horário nome da região (por exemplo,
'Canada/Eastern'
)
Aqui está um exemplo de configuração de TIME_ZONE
para tais valores:
ALTER SESSION SET TIME_ZONE=local;ALTER SESSION SET TIME_ZONE=dbtimezone;ALTER SESSION SET TIME_ZONE='Canada/Eastern';ALTER SESSION SET TIME_ZONE='-04:00';
você pode verificar o fuso horário da sua sessão atual com a função SESSIONTIMEZONE
.
exemplo:
SELECT SESSIONTIMEZONE FROM DUAL;
resultado:
Australia/Brisbane
no meu caso, o fuso horário da sessão está definido como Austrália/Brisbane.
a cláusula de fuso horário AT
uma expressão datetime pode incluir uma cláusula AT LOCAL
ou uma cláusula AT TIME ZONE
. Se você incluir uma cláusula AT LOCAL
, o resultado será retornado no fuso horário da sessão atual. Se você incluir a cláusula AT TIME ZONE
, o fuso horário pode ser um dos seguintes:
- Um deslocamento de fuso horário
- fuso horário nome da região
-
DBTIMEZONE
(esta função retorna o fuso horário do banco de dados) -
SESSIONTIMEZONE
(esta função retorna o fuso horário da sessão actual) - Uma expressão que retorna uma seqüência de caracteres com um fuso horário válido formato.
exemplo:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT TIME ZONE '+12:00'FROM DUAL;
resultado:
02/JAN/30 04:30:35.000000000 AM +12:00
nesse caso, usei a função FROM_TZ()
para converter um valor de carimbo de data / hora e um fuso horário em um valor TIMESTAMP WITH TIME ZONE
. Em seguida, usei a cláusula AT TIME ZONE
para especificar um fuso horário diferente.
aqui está o mesmo exemplo, exceto que desta vez eu especifico AT LOCAL
:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT LOCALFROM DUAL;
resultado:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE