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

Leave a Reply

O seu endereço de email não será publicado.