• Nenhum resultado encontrado

Cristiano Lopes da Silva com br) has a non-transferable license to use this Student Guide

N/A
N/A
Protected

Academic year: 2021

Share "Cristiano Lopes da Silva com br) has a non-transferable license to use this Student Guide"

Copied!
38
0
0

Texto

(1)

Copyright © 2009, Oracle. Todos os direitos reservados.

Gerenciando Dados em

Diferentes Fusos Horários

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(2)

Copyright © 2009, Oracle. Todos os direitos reservados.

Objetivos

Ao concluir esta lição, você será capaz de:

Usar tipos de dados semelhantes a DATE que armazenem

frações de segundos e rastreiem fusos horários

Usar tipos de dados que armazenem a diferença entre

dois valores de data/horário

Usar as seguintes functions de data/horário:

CURRENT_DATE

CURRENT_TIMESTAMP

LOCALTIMESTAMP

DBTIMEZONE

SESSIONTIMEZONE

EXTRACT

TZ_OFFSET

FROM_TZ

TO_TIMESTAMP

TO_YMINTERVAL

TO_DSINTERVAL

Objetivos

Nesta lição, você aprenderá a usar tipos de dados semelhantes a DATE que armazenem frações de segundos e rastreiem fusos horários. Esta lição trata de algumas das functions de data/horário disponíveis no banco de dados Oracle.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

(3)

Copyright © 2009, Oracle. Todos os direitos reservados.

Agenda da Lição

CURRENT_DATE, CURRENT_TIMESTAMP

e LOCALTIMESTAMP

Tipos de dados INTERVAL

Usando as seguintes functions:

– EXTRACT

– TZ_OFFSET

– FROM_TZ

– TO_TIMESTAMP

– TO_YMINTERVAL

– TO_DSINTERVAL

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(4)

Copyright © 2009, Oracle. Todos os direitos reservados.

Fusos Horários

-08:00

A imagem representa o horário

de cada fuso quando a hora de

Greenwich é 12:00.

-05:00

+02:00 +10:00 +07:00

Fusos Horários

As horas do dia são medidas pela rotação da Terra. O horário do dia em um determinado momento dependerá de sua localização. Quando for meio-dia em Greenwich, Inglaterra, será meia-noite ao longo da Linha de Data Internacional. A Terra está dividida em 24 fusos horários, um para cada hora do dia. O horário ao longo do principal meridiano em Greenwich, Inglaterra, é conhecido como Tempo Médio de Greenwich, ou GMT. O GMT atualmente é conhecido como Coordinated Universal Time - Hora Universal, ou UTC. O UTC é o horário padrão usado como referência por todos os outros fusos horários do mundo. É igual durante todo o ano e não é afetado pela estação de verão nem pelo horário de verão. A linha do meridiano é imaginária e se estende do Polo Norte ao Polo Sul. É conhecida como de longitude zero e é a linha a partir da qual todas as outras linhas de longitude são medidas. Todo o horário é medido em relação ao UTC e todos os locais têm uma latitude (sua distância ao norte ou sul do Equador) e uma longitude (sua distância a leste ou oeste do meridiano de Greenwich).

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(5)

Copyright © 2009, Oracle. Todos os direitos reservados.

Parâmetro de Sessão TIME_ZONE

TIME_ZONE

pode ser definido como:

Um deslocamento absoluto

Fuso horário do banco de dados

Fuso horário local do SO

Uma região nomeada

ALTER SESSION SET TIME_ZONE = '-05:00'; ALTER SESSION SET TIME_ZONE = dbtimezone; ALTER SESSION SET TIME_ZONE = local;

ALTER SESSION SET TIME_ZONE = 'America/New_York';

Parâmetro de Sessão TIME_ZONE

O banco de dados Oracle suporta armazenamento de fuso horário com seus dados de data e hora, bem como frações de segundos. O comando ALTER SESSION pode ser usado para alterar os valores de fuso horário na sessão do usuário. Os valores de fuso horário podem ser definidos como um

deslocamento absoluto, um fuso horário local, nomeado ou de banco de dados.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(6)

Copyright © 2009, Oracle. Todos os direitos reservados.

CURRENT_DATE

, CURRENT_TIMESTAMP

e LOCALTIMESTAMP

CURRENT_DATE:

Retorna a data atual da sessão do usuário

Possui um tipo de dados de DATE

CURRENT_TIMESTAMP:

Retorna data/horário atuais da sessão do usuário

Possui um tipo de dados de TIMESTAMP WITH TIME ZONE

LOCALTIMESTAMP:

Retorna data/horário atuais da sessão do usuário

Possui um tipo de dados de TIMESTAMP

CURRENT_DATE, CURRENT_TIMESTAMP e LOCALTIMESTAMP

As functions CURRENT_DATE e CURRENT_TIMESTAMP retornam a data e o timestamp atuais, respectivamente. Um tipo de dados de CURRENT_DATE é DATE. O tipo de dados de

CURRENT_TIMESTAMPé TIMESTAMP WITH TIME ZONE. Os valores retornados exibem o deslocamento do fuso horário da sessão SQL que executa as functions. O deslocamento do fuso horário é a diferença (em horas e minutos) entre o horário local e o UTC (Coordinated Universal Time). O tipo de dados de TIMESTAMP WITH TIME ZONE possui o formato:

TIMESTAMP [ (fractional_seconds_precision) ] WITH TIME ZONE

em que fractional_seconds_precision especifica, como opção, o número de dígitos na parte fracional do campo de data/horário SECOND e pode ser um número no intervalo de 0 a 9. O default é 6.

A function LOCALTIMESTAMP retorna a data e o horário atuais no fuso horário da sessão. A diferença entre LOCALTIMESTAMP e CURRENT_TIMESTAMP é que LOCALTIMESTAMP retorna um valor TIMESTAMP, enquanto CURRENT_TIMESTAMP retorna um valor TIMESTAMP WITH TIME ZONE.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(7)

Copyright © 2009, Oracle. Todos os direitos reservados.

Comparando Data/Horário no

Fuso Horário de uma Sessão

O parâmetro TIME_ZONE é definido como –5:00, e as

instruções SELECT para cada data/horário são executadas

para comparar as diferenças.

ALTER SESSION

SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS'; ALTER SESSION SET TIME_ZONE = '-5:00';

SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;

SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL; SELECT SESSIONTIMEZONE, LOCALTIMESTAMP FROM DUAL;

Comparando Data/Horário no Fuso Horário de uma Sessão O comando ALTER SESSION define o formato de data da sessão como

'DD-MON-YYYY HH24:MI:SS’—ou seja, dia do mês (1–31)-nome abreviado do mês-hora do dia de 4 dígitos (0–23):minuto (0–59):segundo (0–59).

O exemplo no slide mostra que a sessão é alterada para definir o parâmetro TIME_ZONE como – 5:00. Em seguida, a instrução SELECT para CURRENT_DATE, CURRENT_TIMESTAMP e LOCALTIMESTAMPé executada a fim de apontar as diferenças no formato.

Observação: O parâmetro TIME_ZONE especifica o deslocamento do fuso horário local default para a sessão de SQL atual. TIME_ZONE é apenas um parâmetro de sessão, não de inicialização. O parâmetro TIME_ZONE é definido como se segue:

TIME_ZONE = '[+ | -] hh:mm'

A máscara de formato ([+ | -] hh:mm) indica as horas e os minutos antes ou depois do UTC (Coordinated Universal Time, anteriormente conhecido como Tempo Médio de Greenwich).

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(8)

Copyright © 2009, Oracle. Todos os direitos reservados.

Comparando Data/Horário no

Fuso Horário de uma Sessão

Resultados de consultas:

Comparando Data/Horário no Fuso Horário de uma Sessão (continuação)

Neste caso, a function CURRENT_DATE retorna a data atual do fuso horário de uma sessão, a function CURRENT_TIMESTAMP retorna a data e o horário do fuso horário de uma sessão como valor de tipo de dados de TIMESTAMP WITH TIME ZONE e a function LOCALTIMESTAMP retorna data/horário atuais no fuso horário de uma sessão.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(9)

Copyright © 2009, Oracle. Todos os direitos reservados.

DBTIMEZONE

e SESSIONTIMEZONE

Exiba o valor do fuso horário do banco de dados:

Exiba o valor do fuso horário da sessão:

SELECT DBTIMEZONE FROM DUAL;

SELECT SESSIONTIMEZONE FROM DUAL;

DBTIMEZONEe SESSIONTIMEZONE

O DBA define o fuso horário default do banco de dados ao especificar a cláusula SET TIME_ZONE da instrução CREATE DATABASE . Se for omitido, o fuso horário default do banco de dados será o fuso horário do sistema operacional. O fuso horário do banco de dados não pode ser alterado em uma sessão com uma instrução ALTER SESSION.

A function DBTIMEZONE retorna o valor do fuso horário do banco de dados. O tipo de retorno é um deslocamento de fuso horário (um tipo de caractere no formato: '[+|-]TZH:TZM') ou um nome de região de fuso horário, dependendo de como o usuário especificou o valor do fuso horário do banco de dados na instrução CREATE DATABASE ou ALTER DATABASE mais recente. O exemplo do slide mostra que o fuso horário do banco de dados foi definido como “–05:00,” pois o parâmetro TIME_ZONEestá no formato:

TIME_ZONE = '[+ | -] hh:mm'

A function SESSIONTIMEZONE retorna o valor do fuso horário da sessão atual. O tipo de retorno é um deslocamento de fuso horário (um tipo de caractere no formato '[+|-]TZH:TZM') ou um nome de região de fuso horário, dependendo de como o usuário especificou o valor do fuso horário da sessão na instrução ALTER SESSION mais recente. O exemplo do slide mostra que o fuso horário da sessão é o deslocamento para UTC em –8 horas. Observe que o fuso horário do banco de dados é diferente do da sessão atual.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(10)

Copyright © 2009, Oracle. Todos os direitos reservados.

Tipos de Dados TIMESTAMP

Igual ao tipo de dados de TIMESTAMP; também inclui um deslocamento de fuso horário em seu valor

TIMESTAMP WITH LOCAL TIME ZONE

Igual ao tipo de dados de TIMESTAMP, também inclui:

TIMEZONE_HOURe TIMEZONE_MINUTE ou TIMEZONE_REGION

TIMESTAMP WITH TIME ZONE

Ano, Mês, Dia, Hora, Minuto, Segundo com frações de segundos

TIMESTAMP

Campos Tipo de Dados

Tipo de Dados de TIMESTAMP

O tipo de dados de TIMESTAMP é uma extensão do tipo de dados de DATE.

TIMESTAMP (fractional_seconds_ precision)

Este tipo de dados contém os valores de data de ano, mês e dia, além dos valores de tempo de hora, minuto e segundo, em que a precisão significativa de frações de segundos é o número de dígitos na parte fracional do campo de data/horário SECOND. Os valores aceitos de

fractional_seconds_precisionsignificativos estão entre 0 e 9. O default é 6.

TIMESTAMP (fractional_seconds_precision) WITH TIME ZONE

Esse tipo de dados contém todos os valores de TIMESTAMP, bem como o valor de deslocamento do fuso horário.

TIMESTAMP (fractional_seconds_precision) WITH LOCAL TIME ZONE

Esse tipo de dados contém todos os valores de TIMESTAMP, com as seguintes exceções:

• Os dados são normalizados para o fuso horário do banco de dados quando são armazenados no banco de dados.

• Quando os dados são recuperados, os usuários vêem os dados no fuso horário da sessão.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(11)

Copyright © 2009, Oracle. Todos os direitos reservados.

Campos de TIMESTAMP

TIMEZONE_MINUTE –12 a 14 TIMEZONE_HOUR 00 a 59,9(N) em que 9(N) é a precisão SECOND 00 a 59 MINUTE 00 a 23 HOUR 01 a 31 DAY 01 a 12 MONTH –4712 a 9999 (excluindo o ano 0) YEAR Valores Válidos Campo de Data e Hora

00 a 59

Campos de TIMESTAMP

Cada tipo de dados de data/horário é composto de vários desses campos. Datas/horários só serão mutuamente comparáveis e atribuíveis se tiverem os mesmos campos de data/horário.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(12)

Copyright © 2009, Oracle. Todos os direitos reservados.

Diferença Ente DATE e TIMESTAMP

-- when hire_date is

of type DATE

SELECT hire_date

FROM employees;

ALTER TABLE employees

MODIFY hire_date TIMESTAMP;

SELECT hire_date

FROM employees;

B

A

Tipo de Dados de TIMESTAMP: Exemplo

No slide, o exemplo A mostra os dados da coluna hire_date da tabela EMPLOYEES quando o tipo de dados da coluna é DATE. No exemplo B, a tabela é alterada e o tipo de dados da coluna hire_dateé transformado em TIMESTAMP. A saída mostra as diferenças na exibição. Você pode converter de DATE para TIMESTAMP quando a coluna tiver dados, mas não pode converter de DATE ou TIMESTAMP para TIMESTAMP WITH TIME ZONE, a menos que a coluna esteja vazia.

É possível especificar a precisão de fração de segundos do timestamp. Se nenhuma for especificada, como neste exemplo, o valor definido como default será 6.

Por exemplo, a instrução a seguir define a precisão de fração de segundos como 7:

ALTER TABLE employees

MODIFY hire_date TIMESTAMP(7);

Observação: O tipo de dados de data do Oracle aparece por default como mostrado neste exemplo. Entretanto, o tipo de dados de data também contém informações adicionais como horas, minutos, segundos, AM e PM. Para obter a data nesse formato, você pode aplicar uma máscara de formato ou uma function no valor de data.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(13)

Copyright © 2009, Oracle. Todos os direitos reservados.

Comparando Tipos de Dados de TIMESTAMP

CREATE TABLE web_orders

(order_date TIMESTAMP WITH TIME ZONE,

delivery_time TIMESTAMP WITH LOCAL TIME ZONE);

INSERT INTO web_orders values

(current_date, current_timestamp + 2);

SELECT * FROM web_orders;

Comparando Tipos de Dados de TIMESTAMP

No exemplo do slide, uma nova tabela web_orders é criada com uma coluna de tipo de dados TIMESTAMP WITH TIME ZONEe uma coluna de tipo de dados TIMESTAMP WITH LOCAL TIME ZONE. Essa tabela é preenchida sempre que uma web_order é emitida. O timestamp e o fuso horário do usuário que emite a ordem é inserido com base no CURRENT_DATE value. O timestamp e o fuso horário locais são preenchidos inserindo-se dois dias a partir do valor de CURRENT_TIMESTAMPpara ambos sempre que uma ordem é emitida. Quando uma empresa baseada na web garante a remessa, ela pode estimar o prazo de entrega com base no fuso horário da pessoa que emite a ordem.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(14)

Copyright © 2009, Oracle. Todos os direitos reservados.

Agenda da Lição

CURRENT_DATE, CURRENT_TIMESTAMP

e LOCALTIMESTAMP

Tipos de dados de INTERVAL

Usando as seguintes functions:

– EXTRACT

– TZ_OFFSET

– FROM_TZ

– TO_TIMESTAMP

– TO_YMINTERVAL

– TO_DSINTERVAL

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(15)

Copyright © 2009, Oracle. Todos os direitos reservados.

Tipos de Dados de INTERVAL

Os tipos de dados de INTERVAL são usados para

armazenar a diferença entre dois valores de data/horário.

Existem duas classes de intervalos:

Ano-mês

Dia-hora

A precisão do intervalo é:

O subconjunto real de campos que constitui um intervalo

Especificado em um qualificador de intervalo

Dias, Hora, Minuto, Segundo com fração de segundos

INTERVAL DAY TO SECOND

Ano, Mês INTERVAL YEAR TO MONTH

Campos Tipo de Dados

Tipos de Dados de INTERVAL

Os tipos de dados de INTERVALsão usados para armazenar a diferença entre dois valores de data/horário. Existem duas classes de intervalos: ano-mês e dia-hora. Um intervalo ano-mês é constituído de um subconjunto contíguo de campos de YEAR e MONTH, enquanto um intervalo dia-hora é composto de um subconjunto contíguo de campos que consiste em DAY, HOUR, MINUTE e SECOND. O subconjunto real de campos que constitui um intervalo é chamado de precisão do intervalo e é especificado no qualificador de intervalo. Como o número de dias em um ano depende do calendário, o intervalo ano-mês depende do NLS, enquanto o intervalo dia-hora, não.

O qualificador de intervalo também pode especificar a precisão do campo inicial (ou único), que é o número de dígitos. Caso o campo final seja o valor SECOND, o qualificador de intervalo também poderá especificar a precisão das frações de segundos, que é o número de dígitos na parte fracional do valor SECOND. Se não for especificado, o valor default de precisão do campo à inicial será de 2 dígitos, e o valor default de precisão de fração de segundos será de 6 dígitos.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(16)

Este tipo de dados armazena um período em anos e meses, em que year_precision é o número de dígitos no campo de data/horário YEAR. Os valores aceitos estão entre 0 e 9. O default é 6. INTERVAL DAY (day_precision) TO SECOND

(fractional_seconds_precision)

Este tipo de dados armazena um período em dias, horas, minutos e segundos, em que

day_precisioné o número máximo de dígitos no campo de data/horário DAY (os valores aceitos estão entre 0 e 9, o default é 2) e fractional_seconds_precision é o número de dígitos da parte fracional do campo SECOND. Os valores aceitos estão entre 0 e 9. O default é 6.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(17)

Copyright © 2009, Oracle. Todos os direitos reservados.

Campos INTERVAL

00 a 59,9(N) em que 9(N) é a precisão SECOND 00 a 59 MINUTE HOUR DAY MONTH YEAR Campo INTERVAL 00 a 23

Qualquer número inteiro positivo ou negativo 00 a 11

Qualquer número inteiro positivo ou negativo Valores Válidos de Intervalo

Campos INTERVAL

INTERVAL YEAR TO MONTHpode ter campos para YEAR e MONTH.

INTERVAL DAY TO SECONDpodem ter campos para DAY, HOUR, MINUTE e SECOND. O subconjunto real de campos que constitui um item do tipo de intervalo é definido por um qualificador de intervalo e esse subconjunto é conhecido como precisão do item.

Os intervalos de ano-mês são mutuamente comparáveis e atribuíveis apenas a outros intervalos de ano-mês, e os de dia-hora são mutuamente comparáveis e atribuíveis somente a outros intervalos de dia-hora.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(18)

Copyright © 2009, Oracle. Todos os direitos reservados.

INTERVAL YEAR TO MONTH

: Exemplo

CREATE TABLE warranty

(prod_id number, warranty_time INTERVAL YEAR(3) TO MONTH);

INSERT INTO warranty VALUES (123, INTERVAL '8' MONTH); INSERT INTO warranty VALUES (155, INTERVAL '200'

YEAR(3));

INSERT INTO warranty VALUES (678, '200-11'); SELECT * FROM warranty;

Tipo de Dados de INTERVAL YEAR TO MONTH

INTERVAL YEAR TO MONTHarmazena um período usando os campos de data/horário YEAR e MONTH. Especifique INTERVAL YEAR TO MONTH como se segue:

INTERVAL YEAR [(year_precision)] TO MONTH

em que year_precision é o número de dígitos no campo de data/horário YEAR. O valor default de year_precision é 2.

Restrição: O campo inicial deve ser mais significativo do que o campo final. Por exemplo, INTERVAL '0-1' MONTH TO YEARnão é válido.

Exemplos

• INTERVAL '123-2' YEAR(3) TO MONTH

Indica um intervalo de 123 anos, 2 meses

• INTERVAL '123' YEAR(3)

Indica um intervalo de 123 anos, 0 meses

• INTERVAL '300' MONTH(3)

Indica um intervalo de 300 meses

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(19)

INTERVAL DAY TO SECOND; o tipo de coluna, o argumento PL/SQL, a variável e o tipo de retorno devem ser um dos dois. Mas para literais de intervalo, o sistema reconhece outros tipos de intervalo ANSI (American National Standards Institute) como INTERVAL '2' YEAR ou INTERVAL '10' HOUR. Nesses casos, cada intervalo é convertido em um dos dois tipos suportados.

No exemplo do slide, é criada uma tabela WARRANTY, que contém uma coluna warranty_time que aceita o tipo de dados INTERVAL YEAR(3) TO MONTH. Valores diferentes são inseridos nela para indicar anos e meses de vários produtos. Quando essas linhas são recuperadas da tabela, você vê o valor do ano separado do valor do mês por um (-).

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(20)

Copyright © 2009, Oracle. Todos os direitos reservados.

Tipo de Dados de INTERVAL DAY TO SECOND:

Exemplo

CREATE TABLE lab

( exp_id number, test_time INTERVAL DAY(2) TO SECOND); INSERT INTO lab VALUES (100012, '90 00:00:00');

INSERT INTO lab VALUES (56098,

INTERVAL '6 03:30:16' DAY TO SECOND);

SELECT * FROM lab;

Tipo de Dados de INTERVAL DAY TO SECOND: Exemplo

No exemplo do slide, você está criando a tabela de laboratório com uma coluna test_time do tipo de dados de INTERVAL DAY TO SECOND. Em seguida, insira nela o valor “90 00:00:00” para indicar 90 dias e 0 horas, 0 minutos, 0 segundos e INTERVAL '6 03:30:16' DAY TO SECONDpara indicar 6 dias, 3 horas, 30 minutos e 16 segundos. A instrução SELECT mostra como esses dados são exibidos no banco de dados.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(21)

Copyright © 2009, Oracle. Todos os direitos reservados.

Agenda da Lição

CURRENT_DATE, CURRENT_TIMESTAMP

e LOCALTIMESTAMP

Tipos de dados de INTERVAL

Usando as seguintes functions:

EXTRACT

TZ_OFFSET

FROM_TZ

TO_TIMESTAMP

TO_YMINTERVAL

TO_DSINTERVAL

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(22)

Copyright © 2009, Oracle. Todos os direitos reservados.

EXTRACT

Exiba o componente YEAR de SYSDATE.

Exiba o componente MONTH de HIRE_DATE para

funcionários cujo MANAGER_ID seja 100.

SELECT EXTRACT (YEAR FROM SYSDATE) FROM DUAL;

SELECT last_name, hire_date,

EXTRACT (MONTH FROM HIRE_DATE) FROM employees

WHERE manager_id = 100;

EXTRACT

A expressão EXTRACT extrai e retorna o valor de um campo de data/horário especificado de uma expressão de valor de data/horário ou intervalo. Você pode extrair qualquer componente citado na sintaxe anterior usando a function EXTRACT. A sintaxe da function EXTRACT é:

SELECT EXTRACT ([YEAR] [MONTH][DAY] [HOUR] [MINUTE][SECOND] [TIMEZONE_HOUR] [TIMEZONE_MINUTE]

[TIMEZONE_REGION] [TIMEZONE_ABBR]

FROM [datetime_value_expression] [interval_value_expression]);

Quando você extrai TIMEZONE_REGION ou TIMEZONE_ABBR (abreviação), o valor retornado é uma string que contém o nome ou a abreviação do fuso horário apropriado. Quando extrai qualquer um dos outros valores, o valor retornado é uma data do calendário gregoriano. Durante a extração de data/horário com um valor de fuso horário, o valor retornado está em UTC.

No primeiro exemplo do slide, a function EXTRACT é usada para extrair YEAR de SYSDATE. No segundo exemplo do slide, a function EXTRACT é usada a fim de extrair MONTH da coluna HIRE_DATEda tabela EMPLOYEES para os funcionários que reportam ao gerente cujo

seja 100.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(23)

Copyright © 2009, Oracle. Todos os direitos reservados.

TZ_OFFSET

Exiba o deslocamento de fuso horário para os fusos

'US/Eastern', 'Canada/Yukon' e 'Europe/London'

:

SELECT TZ_OFFSET('US/Eastern'),

TZ_OFFSET('Canada/Yukon'), TZ_OFFSET('Europe/London') FROM DUAL;

TZ_OFFSET

A function TZ_OFFSET retorna o deslocamento de fuso horário correspondente ao valor informado. O valor de retorno depende da data em que a instrução é executada. Por exemplo, se a function TZ_OFFSETretornar um valor –08:00, esse valor indicará que o fuso horário em que o comando foi executado está oito horas atrás do UTC. Você pode informar um nome de fuso horário válido, um deslocamento de fuso horário do UTC (que retorna a si mesmo) ou a palavra-chave

SESSIONTIMEZONEou DBTIMEZONE. A sintaxe da function TZ_OFFSET é:

TZ_OFFSET ( ['time_zone_name'] '[+ | -] hh:mm'] [ SESSIONTIMEZONE] [DBTIMEZONE]

A Ford Motor Company possui sede em Michigan, EUA, cujo fuso horário é o do leste dos Estados Unidos. O presidente da empresa, sr. Ford, deseja conduzir uma conference call com os vice-presidentes de operações do Canadá e da Europa, que estão nos fusos horários de Canadá/Yukon e Europa/Londres, respectivamente. O sr. Ford deseja saber o horário em cada um desses locais para confirmar a participação de sua gerência na reunião. Seu assistente, o sr. Scott, ajuda emitindo as consultas mostradas no exemplo e obtém os seguintes resultados:

• O fuso horário 'US/Eastern' está atrasado quatro horas em relação ao UTC. • O fuso horário 'Canada/Yukon' está atrasado sete horas em relação ao UTC. • O fuso horário 'Europe/London' está uma hora adiantado em relação ao UTC.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(24)

dinâmica de desempenho V$TIMEZONE_NAMES. SELECT * FROM V$TIMEZONE_NAMES;

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(25)

Copyright © 2009, Oracle. Todos os direitos reservados.

FROM_TZ

Exiba o valor de TIMESTAMP

'2000-03-28 08:00:00'

como

valor de TIMESTAMP WITH TIME ZONE para a região de fuso

horário 'Australia/North'.

SELECT FROM_TZ(TIMESTAMP

'2000-07-12 08:00:00', 'Australia/North') FROM DUAL;

FROM_TZ

A function FROM_TZ converte um valor de TIMESTAMP em um valor de TIMESTAMP WITH TIME ZONE.

A sintaxe da function FROM_TZ é:

FROM_TZ(TIMESTAMP timestamp_value, time_zone_value)

em que time_zone_value é uma string de caracteres no formato 'TZH:TZM' ou uma expressão de caracteres que retorna uma string em TZR (região de fuso horário) com um formato TZD opcional. TZDé uma string de fuso horário abreviada com informações sobre o horário de verão. TZR

representa a região do fuso horário nas strings de entrada de data/horário. 'Australia/North' e 'PST'são exemplos para o horário padrão EUA/Pacífico, 'PDT' para horário de verão

EUA/Pacífico etc.

O exemplo do slide converte um valor de TIMESTAMP em TIMESTAMP WITH TIME ZONE. Observação: Para exibir uma lista de valores válidos para os elementos de formato TZR e TZD, consulte a view dinâmica de desempenho V$TIMEZONE_NAMES.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(26)

Copyright © 2009, Oracle. Todos os direitos reservados.

TO_TIMESTAMP

Exiba a string de caracteres

'2007-03-06 11:00:00'

como um valor TIMESTAMP:

SELECT TO_TIMESTAMP ('2007-03-06 11:00:00', 'YYYY-MM-DD HH:MI:SS') FROM DUAL;

TO_TIMESTAMP

A function TO_TIMESTAMP converte uma string de CHAR, VARCHAR2, NCHAR ou o tipo de dados de NVARCHAR2 em um valor do tipo de dados TIMESTAMP. A sintaxe da function

TO_TIMESTAMPé:

TO_TIMESTAMP (char,[fmt],['nlsparam'])

O fmt opcional especifica o formato de char. Se você omitir fmt, a string deverá estar no formato default do tipo de dados TIMESTAMP. O nlsparam opcional especifica o idioma no qual

abreviações e nomes de mês e dia são retornados. Este argumento pode ter o seguinte formato:

'NLS_DATE_LANGUAGE = language'

Se você omitir nlsparams, essa function usará o idioma de data default para sua sessão. O exemplo do slide converte uma string de caracteres em um valor de TIMESTAMP.

Observação: Você pode usar a function TO_TIMESTAMP_TZ para converter uma string de CHAR, VARCHAR2, NCHAR, ou de tipo de dados NVARCHAR2 em um valor do tipo de dados TIMESTAMP WITH TIME ZONE. Para obter mais informações sobre essa function, consulte Oracle Database SQL Language Reference 11g Release 1 (11.1).

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(27)

Copyright © 2009, Oracle. Todos os direitos reservados.

TO_YMINTERVAL

Exiba uma data de um ano e dois meses após a data de

contratação dos funcionários do departamento com o

DEPARTMENT_ID

20.

SELECT hire_date, hire_date + TO_YMINTERVAL('01-02') AS HIRE_DATE_YMININTERVAL FROM employees WHERE department_id = 20; TO_YMINTERVAL

A function TO_YMINTERVAL converte uma string de caracteres de CHAR, VARCHAR2, NCHAR, ou tipo de dados de NVARCHAR2 em um tipo de dados de INTERVAL YEAR TO MONTH. O tipo de dados de INTERVAL YEAR TO MONTH armazena um período usando os campos de data/horário YEARe MONTH. O formato de INTERVAL YEAR TO MONTH é:

INTERVAL YEAR [(year_precision)] TO MONTH

em que year_precision é o número de dígitos no campo de data/horário YEAR. O valor default de year_precision é 2.

A sintaxe da function TO_YMINTERVAL é:

TO_YMINTERVAL (char)

em que char é a string de caracteres a ser convertida

O exemplo no slide calcula uma data de um ano e dois meses após a data de contratação dos funcionários do departamento 20 da tabela EMPLOYEES.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(28)

Copyright © 2009, Oracle. Todos os direitos reservados.

TO_DSINTERVAL

Exiba uma data 100 dias e 10 horas após a data de

contratação de todos os funcionários.

SELECT last_name,

TO_CHAR(hire_date, 'mm-dd-yy:hh:mi:ss') hire_date, TO_CHAR(hire_date + TO_DSINTERVAL('100 10:00:00'), 'mm-dd-yy:hh:mi:ss') hiredate2 FROM employees;

TO_DSINTERVAL

TO_DSINTERVALconverte uma string de caracteres de CHAR, VARCHAR2, NCHAR, ou de tipo de dados de NVARCHAR2 em um tipo de dados de INTERVAL DAY TO SECOND.

No exemplo do slide, a data de 100 dias e 10 horas após a contratação é obtida.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

(29)

Copyright © 2009, Oracle. Todos os direitos reservados.

Horário de Verão

Primeiro Domingo de Abril

O horário salta de 01:59:59 para 03:00:00.

Os valores entre 02:00:00 a 02:59:59 AM não são válidos.

Último Domingo de Outubro

O horário salta de 02:00:00 para 01:00:01.

Os valores entre 01:00:01 a 02:00:00 são ambíguos porque

são acessados duas vezes.

DST (Horário de Verão)

A maioria dos países ocidentais avança o relógio uma hora durante os meses de verão. O período é chamado de horário de verão. O horário de verão compreende o primeiro domingo de abril até o último domingo de outubro na maioria dos Estados Unidos, México e Canadá. Os países da União Europeia cumprem o horário de verão, mas eles o chamam de período de verão. O período de verão da Europa começa uma semana antes de sua contrapartida norte-americana, mas termina na mesma época.

O banco de dados Oracle verifica automaticamente, para qualquer região de fuso horário, se o horário de verão está em vigor e retorna os valores respectivos ao horário local. O valor de data/horário é suficiente para o banco de dados Oracle verificar se o horário de verão está em vigor em uma determinada região em todos os casos, exceto casos de limite. Um caso de limite ocorre durante o período de início ou término do horário de verão. Por exemplo, na região EUA/Oriental, quando o horário de verão entra em vigor, o horário é alterado de 01:59:59 para 03:00:00. O intervalo de uma hora entre 02:00:00 e 02:59:59 não existe. Quando o horário de verão termina, o horário é alterado de 02:00:00 para 01:00:01, e o intervalo de uma hora entre 01:00:01 e 02:00:00 é repetido.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(30)

ERROR_ON_OVERLAP_TIMEé um parâmetro de sessão que faz com que o sistema emita um erro ao encontrar uma data/horário que ocorra no período sobreposto e nenhuma abreviação de fuso horário tiver sido especificada para distinguir o período.

Por exemplo, o horário de verão termina em 31 de outubro, às 02:00:01. Os períodos sobrepostos são: • 31/10/2004 01:00:01 a 31/10/2004 02:00:00 (EDT)

• 31/10/2004 01:00:01 a 31/10/2004 02:00:00 (EST)

Se você inserir uma string de data/horário que ocorra em um desses dois períodos, deverá especificar a abreviação do fuso horário (por exemplo, EDT ou EST) na string de entrada para que o sistema determine o período. Sem essa abreviação do fuso horário, o sistema faz o seguinte:

Se o parâmetro ERROR_ON_OVERLAP_TIME for FALSE, ele considerará que o horário de entrada é o padrão (por exemplo, EST). Caso contrário, um erro será indicado.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(31)

Copyright © 2009, Oracle. Todos os direitos reservados.

Quiz

O parâmetro de sessão TIME_ZONE pode ser definido como:

1.

Um deslocamento relativo

2.

Fuso horário do banco de dados

3.

Fuso horário local do SO

4.

Uma região nomeada

Respostas: 2, 3, 4

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(32)

Copyright © 2009, Oracle. Todos os direitos reservados.

Resumo

Nesta lição, você aprendeu a usar as functions:

CURRENT_DATE

CURRENT_TIMESTAMP

LOCALTIMESTAMP

DBTIMEZONE

SESSIONTIMEZONE

EXTRACT

TZ_OFFSET

FROM_TZ

TO_TIMESTAMP

TO_YMINTERVAL

TO_DSINTERVAL

Resumo

Esta lição trata de algumas das functions de data/horário disponíveis no banco de dados Oracle.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(33)

Copyright © 2009, Oracle. Todos os direitos reservados.

Exercício 5: Visão Geral

Este exercício aborda o uso das functions de data/horário.

Exercício 5: Visão Geral

Neste exercício, você exibe os deslocamentos de fuso horário, CURRENT_DATE,

CURRENT_TIMESTAMPe LOCALTIMESTAMP. Define também os fusos horários e usa a function EXTRACT

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

.

non-transferable license to use this Student Guideฺ

(34)

2. a. Crie consultas para exibir os deslocamentos do fuso horário (TZ_OFFSET) para os seguintes fusos horários.

- EUA/Pacífico-Novo

- Cingapura

- Egito

b. Altere a sessão a fim de definir o valor do parâmetro TIME_ZONE para o deslocamento do fuso horário de EUA/Pacífico-Novo.

c. Exiba CURRENT_DATE, CURRENT_TIMESTAMP e LOCALTIMESTAMP para esta sessão.

d. Altere a sessão a fim de definir o valor do parâmetro TIME_ZONE para o deslocamento do fuso horário de Cingapura.

e. Exiba CURRENT_DATE, CURRENT_TIMESTAMP e LOCALTIMESTAMP para esta sessão.

Observação: O resultado poderá ser diferente com base na data em que o comando foi executado.

Observação: Observe no exercício anterior que CURRENT_DATE,

CURRENT_TIMESTAMPe LOCALTIMESTAMP dependem do fuso horário da sessão. 3. Crie uma consulta para exibir DBTIMEZONE e SESSIONTIMEZONE.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(35)

funcionários que trabalham no departamento 80.

5. Altere a sessão para definir NLS_DATE_FORMAT como DD-MON-YYYY.

6. Examine e execute o script lab_05_06.sql para criar a tabela SAMPLE_DATES e preenchê-la.

a. Selecione na tabela e exiba os dados.

b. Modifique o tipo de dados da coluna DATE_COL e altere-o para TIMESTAMP. Selecione na tabela para exibir os dados.

c. Tente modificar o tipo de dados da coluna DATE_COL e altere-o para TIMESTAMP WITH TIME ZONE. O que acontece?

7. Crie uma consulta para recuperar os sobrenomes com base na tabela EMPLOYEES e calcular o status da avaliação. Se o ano de contratação for 1998, exiba Needs Review para o status da avaliação, caso contrário, exiba not this year! Nomeie a coluna de status da avaliação como Review. Classifique os resultados pela coluna HIRE_DATE.

Dica: Use uma expressão CASE com a function EXTRACT para calcular o status da avaliação.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(36)

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(37)

8. Crie uma consulta para imprimir os sobrenomes e o número de anos de serviço de cada funcionário. Se o funcionário tiver sido empregado por cinco ou mais anos, imprima 5 years of service. Se o funcionário tiver sido empregado por 10 ou mais anos, imprima 10 years of service. Se o funcionário tiver sido empregado por 15 ou mais anos, imprima 15 years of service. Se nenhuma dessas condições for atendida, imprima maybe next year! Classifique os resultados pela coluna HIRE_DATE. Use a tabela EMPLOYEES.

Dica: Use as expressões CASE e TO_YMINTERVAL.

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

(38)

Cristiano Lopes da Silva (opscris@yahooฺcomฺbr) has a

non-transferable license to use this Student Guideฺ

Referências

Documentos relacionados

上記ご記入の上、弊社アフターセールス部までFAXしてください。FAX:03-6692-1317

“Entre o Município de Vinhais, adiante designado por Município, representado pelo presidente da Câmara Municipal, Luís dos Santos Fernandes, e a Junta de

Presidente, demais Deputados aqui presentes, quero fazer um cumprimento especial ao pessoal da galeria e dizer que estou na luta junto com eles e todos os futuros servidores

Em setembro, autorizou-nos a empregar R$240 milhões mensais de rendimentos de capitalização dos fundos do IPREV (Instituto de Previdência dos Servidores do Distrito

PRESIDENTE (DEPUTADO RICARDO VALE) – Quero convidar a Presidente do Sindicato dos Taxistas do Distrito Federal, Sra. Maria Bonfim, a Mariazinha, para fazer uso da

• O primeiro fuso horário brasileiro encontra-se duas horas atrasado em relação ao Meridiano de Greenwich e uma hora adiantado em relação ao horário de Brasília. Esse fuso

Manter quadro de pessoal suficiente para atendimento dos serviços conforme previsto neste termo de referência, sem interrupção, seja por motivo de férias, descanso, licença,

Serviço de fretamento eventual de ônibus com motoristas, para o transporte de militares. Tipo de veículo: ônibus executivo ou equivalente. Efetivo: 42 militares por veículo e