Você está na página 1de 38

Faculdade Impacta Tecnologia

Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Gerenciando Dados em
Diferentes Fusos Horários

a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in Oracle.eTodos
Copyright © 2009,
( t os direitos reservados.
s
p aio licen
S am able
i c ius nsfer
Vin n-tra
no
Faculdade Impacta Tecnologia

Objetivos
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

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 – TZ_OFFSET
– CURRENT_TIMESTAMP – FROM_TZ
a
– LOCALTIMESTAMP – TO_TIMESTAMP
) has
TO_YMINTERVALom
– DBTIMEZONE –
i l ฺ c uideฺ
– SESSIONTIMEZONE – ma
TO_DSINTERVAL G g ent
– @
aio Stud
EXTRACT
p
l s am this
i c ius o use
v in Oracle.eTodos
Copyright © 2009,
( t os direitos reservados.
s
p aio licen
Objetivos
S am able
Nesta lição, você
i c i usaprenderá
s f era usar tipos de dados semelhantes a DATE que armazenem frações de
trande dados Oracle.
segundosine rastreiem fusos horários. Esta lição trata de algumas das functions de data/horário
V nonbanco
disponíveis -
no

Oracle Database 11g: Fundamentos de SQL II 5 - 2


Faculdade Impacta Tecnologia

Agenda da Lição


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

CURRENT_DATE, CURRENT_TIMESTAMP
e LOCALTIMESTAMP
• Tipos de dados INTERVAL
• Usando as seguintes functions:
– EXTRACT
– TZ_OFFSET
– FROM_TZ
– TO_TIMESTAMP
a
– TO_YMINTERVAL
) has
– TO_DSINTERVAL
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in Oracle.eTodos
Copyright © 2009,
( t os direitos reservados.
s
p aio licen
S am able
i c ius nsfer
Vin n-tra
no

Oracle Database 11g: Fundamentos de SQL II 5 - 3


Faculdade Impacta Tecnologia

Fusos Horários
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

-08:00 +07:00

+02:00 +10:00
-05:00

s a
a
)h ฺ
m
co uide
A imagem representa o horário i l ฺ
de cada fuso quando aghora ma de n t G
Greenwich é 12:00. a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Fusos Horários
S am able
As horas do diausão
i c i s medidas
s f erpela rotação da Terra. O horário do dia em um determinado momento
dependerá
longo V
da Linha
an Internacional.
inde sua-detrlocalização.
Data
Quando for meio-dia em Greenwich, Inglaterra, será meia-noite ao
A Terra está dividida em 24 fusos horários, um para cada hora
n o n
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).

Oracle Database 11g: Fundamentos de SQL II 5 - 4


Faculdade Impacta Tecnologia

Parâmetro de Sessão TIME_ZONE

TIME_ZONE pode ser definido como:


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

• 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;
s a
ALTER SESSION SET TIME_ZONE = 'America/New_York'; a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
am able
Parâmetro de Sessão TIME_ZONE
S
i c ideussegundos.
O banco de dados
s f eOr comando
Oracle suporta armazenamento de fuso horário com seus dados de data e hora, bem

V i n tran
como frações ALTER SESSION pode ser usado para alterar os valores de

n o n-sessão do usuário. Os valores de fuso horário podem ser definidos como um


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

Oracle Database 11g: Fundamentos de SQL II 5 - 5


Faculdade Impacta Tecnologia

CURRENT_DATE, CURRENT_TIMESTAMP
e LOCALTIMESTAMP

Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

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
s a
– Possui um tipo de dados de TIMESTAMP a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
am able
CURRENT_DATE, CURRENT_TIMESTAMP
S
e LOCALTIMESTAMP

i c iusUmntipo
As functions CURRENT_DATE
s federdados
e CURRENT_TIMESTAMP retornam a data e o timestamp atuais,

V i n tra
respectivamente. de CURRENT_DATE é DATE. O tipo de dados de
n-
CURRENT_TIMESTAMP
n o é 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.
Essas functions são compatíveis com NLS (national language support)—isto é, os resultados estarão
nos formatos de calendário e data/horário de NLS atuais.
Observação: A function SYSDATE retorna a data e o horário atuais como um tipo de dados de
DATE. Você aprendeu a usar a function SYSDATE no curso Oracle Database 11g: Fundamentos de
SQL I.
Oracle Database 11g: Fundamentos de SQL II 5 - 6
Faculdade Impacta Tecnologia

Comparando Data/Horário no
Fuso Horário de uma Sessão
O parâmetro TIME_ZONE é definido como –5:00, e as
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

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;
s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Comparando Data/Horário
S am anobFuso le Horário de uma Sessão
O comando ALTER
i c
SESSION
s f er define o formato
ius HH24:MI:SS’—ou de data da sessão como
i n tran
'DD-MON-YYYY
V
seja, dia do mês (1–31)-nome abreviado do mês-hora do

n o n-(0–23):minuto (0–59):segundo (0–59).


dia de 4 dígitos
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).

Oracle Database 11g: Fundamentos de SQL II 5 - 7


Faculdade Impacta Tecnologia

Comparando Data/Horário no
Fuso Horário de uma Sessão
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Resultados de consultas:

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Comparando Data/Horário
S am anobFuso le Horário de uma Sessão (continuação)
i c s fer retornaretorna
ius nCURRENT_DATE
Neste caso, a function a data atual do fuso horário de uma sessão, a

V n tra
functioniCURRENT_TIMESTAMP a data e o horário do fuso horário de uma sessão como

n o n-dados de TIMESTAMP WITH TIME ZONE e a function LOCALTIMESTAMP


valor de tipo de
retorna data/horário atuais no fuso horário de uma sessão.

Oracle Database 11g: Fundamentos de SQL II 5 - 8


Faculdade Impacta Tecnologia

DBTIMEZONE e SESSIONTIMEZONE
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

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

SELECT DBTIMEZONE FROM DUAL;

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


SELECT SESSIONTIMEZONE FROM DUAL;

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
am able
DBTIMEZONE e SESSIONTIMEZONE
S
O DBA define u
i c s fer default. Sedoforbanco
i o sfusonhorário de dados ao especificar a cláusula SET TIME_ZONE

V i n tra
da instrução CREATE DATABASE omitido, o fuso horário default do banco de dados será o
fuso horário do
o n -sistema operacional. O fuso horário do banco de dados não pode ser alterado em uma
n
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_ZONE está 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.

Oracle Database 11g: Fundamentos de SQL II 5 - 9


Faculdade Impacta Tecnologia

Tipos de Dados TIMESTAMP


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Tipo de Dados Campos

TIMESTAMP Ano, Mês, Dia, Hora, Minuto, Segundo


com frações de segundos

TIMESTAMP WITH TIME ZONE Igual ao tipo de dados de TIMESTAMP,


também inclui:
TIMEZONE_HOUR e TIMEZONE_MINUTE
ou TIMEZONE_REGION s a
a
)h ฺ
m
co uide
i
Igual ao tipo de dados de TIMESTAMP;l ฺ
TIMESTAMP WITH LOCAL
também inclui um deslocamentog ma de n t G
fuso
o@ tude
TIME ZONE
horário em seu valor
a
p is S i
s a m th
s l e
iu o us
icOracle.
v i n
Copyright © 2009,
( e t os direitos reservados.
Todos
s
p aio licen
am able
Tipo de Dados de TIMESTAMP
S
O tipo de dadosude
i c s f er é uma extensão do tipoprecision)
i s TIMESTAMP de dados de DATE.

V in -tran
TIMESTAMP (fractional_seconds_

minuto e n
on contém os valores de data de ano, mês e dia, além dos valores de tempo de hora,
Este tipo de dados
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_precision significativos 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.

Oracle Database 11g: Fundamentos de SQL II 5 - 10


Faculdade Impacta Tecnologia

Campos de TIMESTAMP
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Campo de Data e Hora Valores Válidos


YEAR –4712 a 9999 (excluindo o ano 0)
MONTH 01 a 12
DAY 01 a 31
HOUR 00 a 23
MINUTE 00 a 59
00 a 59,9(N) em que 9(N) é a precisão
SECOND
s a
TIMEZONE_HOUR –12 a 14
) h a
TIMEZONE_MINUTE 00 a 59 m
co uideฺ
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Campos de TIMESTAMP
S am able
Cada tipo de dados
i c i s f er é composto de vários desses campos. Datas/horários só serão
us de data/horário
Vin n-tran
mutuamente comparáveis e atribuíveis se tiverem os mesmos campos de data/horário.

no

Oracle Database 11g: Fundamentos de SQL II 5 - 11


Faculdade Impacta Tecnologia

Diferença Ente DATE e TIMESTAMP


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

A B
-- when hire_date is ALTER TABLE employees
of type DATE MODIFY hire_date TIMESTAMP;

SELECT hire_date SELECT hire_date


FROM employees; FROM employees;

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
… amp his S
i u sls use t
i n icOracle. Todos
to os direitos reservados.
( v
Copyright © 2009,
s e
p aio licen
Tipo de Dados de TIMESTAMP:
S am ableExemplo
No slide, o exemplo
i c
s A mostra
iucoluna s f er os Nodados da coluna hire_date da tabela EMPLOYEES quando o

V i n tran
tipo de dados da é DATE. exemplo B, a tabela é alterada e o tipo de dados da coluna
hire_daten é -transformado em TIMESTAMP. A saída mostra as diferenças na exibição. Você pode
n o
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.

Oracle Database 11g: Fundamentos de SQL II 5 - 12


Faculdade Impacta Tecnologia

Comparando Tipos de Dados de TIMESTAMP


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

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;

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Comparando Tipos dem
S a Dados b
de
l e TIMESTAMP
s umafenova
No exemplo douslide,
i ra tabela web_orders é criada com uma coluna de tipo de dados
TIMESTAMP
V i nic WITH
t r a ns ZONE e uma coluna de tipo de dados TIMESTAMP WITH LOCAL
TIME
TIME ZONE.nEssa
o - tabela é preenchida sempre que uma web_order é emitida. O timestamp
n
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_TIMESTAMP para 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.

Oracle Database 11g: Fundamentos de SQL II 5 - 13


Faculdade Impacta Tecnologia

Agenda da Lição


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

CURRENT_DATE, CURRENT_TIMESTAMP
e LOCALTIMESTAMP
• Tipos de dados de INTERVAL
• Usando as seguintes functions:
– EXTRACT
– TZ_OFFSET
– FROM_TZ
– TO_TIMESTAMP
a
– TO_YMINTERVAL
) has
– TO_DSINTERVAL
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in Oracle.eTodos
Copyright © 2009,
( t os direitos reservados.
s
p aio licen
S am able
i c ius nsfer
Vin n-tra
no

Oracle Database 11g: Fundamentos de SQL II 5 - 14


Faculdade Impacta Tecnologia

Tipos de Dados de INTERVAL

• Os tipos de dados de INTERVAL são usados para


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

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
s a
Tipo de Dados Campos a
)h ฺ
m
co uide
INTERVAL YEAR TO MONTH Ano, Mês
i l ฺ
acom fração
Dias, Hora, Minuto, g
Segundo m n t G
o@ tude
INTERVAL DAY TO SECOND
de segundos
a
p is S i
s a m th
s l e
iu o us
icOracle.
v i n
Copyright © 2009,
( e t os direitos reservados.
Todos
s
p aio licen
Tipos de Dados de INTERVAL
S am able
Os tipos de
i c i usdados s f eder INTERVAL são usados para armazenar a diferença entre dois valores
Vin denum
de data/horário.
constituído - an duas classes
Existem
trsubconjunto
de intervalos: ano-mês e dia-hora. Um intervalo ano-mês é
contíguo de campos de YEAR e MONTH, enquanto um intervalo dia-
no de um subconjunto contíguo de campos que consiste em DAY, HOUR, MINUTE e
hora é composto
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.

Oracle Database 11g: Fundamentos de SQL II 5 - 15


Faculdade Impacta Tecnologia

Tipos de Dados de INTERVAL (continuação)


INTERVAL YEAR (year_precision) TO MONTH
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
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

(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.

a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no

Oracle Database 11g: Fundamentos de SQL II 5 - 16


Faculdade Impacta Tecnologia

Campos INTERVAL
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Campo INTERVAL Valores Válidos de Intervalo


YEAR Qualquer número inteiro positivo ou negativo

MONTH 00 a 11

DAY Qualquer número inteiro positivo ou negativo

HOUR 00 a 23
a
MINUTE 00 a 59
) has
SECOND 00 a 59,9(N) em que 9(N) é a precisão
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in Oracle.eTodos
Copyright © 2009,
( t os direitos reservados.
s
p aio licen
Campos INTERVAL
S am able
INTERVAL YEAR
i c ius TOnMONTH
s fer pode ter campos para YEAR e MONTH.
Vin DAY
INTERVAL
- t r
TOa SECOND podem ter campos para DAY, HOUR, MINUTE e SECOND.
onreal de campos que constitui um item do tipo de intervalo é definido por um
O subconjunto
n
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.

Oracle Database 11g: Fundamentos de SQL II 5 - 17


Faculdade Impacta Tecnologia

INTERVAL YEAR TO MONTH: Exemplo


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

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;
s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
S am abYEAR
Tipo de Dados de INTERVAL le TO MONTH
INTERVAL YEAR
i c fer armazena
ius TOnINTERVAL
MONTH
s
um período usando os campos de data/horário YEAR e

V n tra
MONTH. iEspecifique YEAR TO MONTH como se segue:
INTERVAL n - [(year_precision)] TO MONTH
o YEAR
n
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 YEAR nã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
• INTERVAL '123' YEAR
Retorna um erro porque a precisão default é 2, e 123 possui 3 dígitos

Oracle Database 11g: Fundamentos de SQL II 5 - 18


Faculdade Impacta Tecnologia

Tipo de Dados INTERVAL YEAR TO MONTH (continuação)


O banco de dados Oracle suporta dois tipos de dados de intervalo: INTERVAL YEAR TO MONTH e
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.
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

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 (-).

a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no

Oracle Database 11g: Fundamentos de SQL II 5 - 19


Faculdade Impacta Tecnologia

Tipo de Dados de INTERVAL DAY TO SECOND:


Exemplo
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

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);

s a
SELECT * FROM lab; a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Tipo de Dados de INTERVAL
S am abDAY le TO SECOND: Exemplo
i s nvocê
No exemplo douslide, r criando a tabela de laboratório com uma coluna test_time do tipo
eestá
fDAY
deic
de dadosin s TO SECOND. Em seguida, insira nela o valor “90 00:00:00” para
V
INTERVAL
indicar 90 dias t r a
e- 0 horas, 0 minutos, 0 segundos e INTERVAL '6 03:30:16' DAY TO
n o n
SECOND para 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.

Oracle Database 11g: Fundamentos de SQL II 5 - 20


Faculdade Impacta Tecnologia

Agenda da Lição


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

CURRENT_DATE, CURRENT_TIMESTAMP
e LOCALTIMESTAMP
• Tipos de dados de INTERVAL
• Usando as seguintes functions:
– EXTRACT
– TZ_OFFSET
– FROM_TZ
– TO_TIMESTAMP
a
– TO_YMINTERVAL
) has
– TO_DSINTERVAL
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in Oracle.eTodos
Copyright © 2009,
( t os direitos reservados.
s
p aio licen
S am able
i c ius nsfer
Vin n-tra
no

Oracle Database 11g: Fundamentos de SQL II 5 - 21


Faculdade Impacta Tecnologia

EXTRACT

• Exiba o componente YEAR de SYSDATE.


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

SELECT EXTRACT (YEAR FROM SYSDATE) FROM DUAL;

• Exiba o componente MONTH de HIRE_DATE para


funcionários cujo MANAGER_ID seja 100.
SELECT last_name, hire_date,
EXTRACT (MONTH FROM HIRE_DATE)
s a
FROM employees
WHERE manager_id = 100;
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
EXTRACT
S am able
i c i us sextrai
A expressão EXTRACT
f er e retorna o valor de um campo de data/horário especificado de uma
expressãoinde valor
sintaxeVanterior - t r adendata/horário
usando a function
ou intervalo. Você pode extrair qualquer componente citado na
A sintaxe da function EXTRACT é:
nonEXTRACT ([YEAR] [MONTH][DAY] [HOUR] [MINUTE][SECOND]
EXTRACT.
SELECT
[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_DATE da tabela EMPLOYEES para os funcionários que reportam ao gerente cujo
EMPLOYEE_ID seja 100.

Oracle Database 11g: Fundamentos de SQL II 5 - 22


Faculdade Impacta Tecnologia

TZ_OFFSET

Exiba o deslocamento de fuso horário para os fusos


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

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

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

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
TZ_OFFSET
S am able
i c i er o deslocamento de fuso horário correspondente ao valor informado.
us sfretorna
A function TZ_OFFSET

Vin nretornar tr num valor –08:00, esse valor indicará que o fuso horário em que o comando foi
O valor de retorno a depende da data em que a instrução é executada. Por exemplo, se a function
TZ_OFFSET -
o oito horas atrás do UTC. Você pode informar um nome de fuso horário válido, um
executadonestá
deslocamento de fuso horário do UTC (que retorna a si mesmo) ou a palavra-chave
SESSIONTIMEZONE ou 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.

Oracle Database 11g: Fundamentos de SQL II 5 - 23


Faculdade Impacta Tecnologia

TZ_OFFSET (continuação)
Para obter uma lista de valores de nome de fuso horário válidos, você pode consultar a view
dinâmica de desempenho V$TIMEZONE_NAMES.
SELECT * FROM V$TIMEZONE_NAMES;
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
… i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no

Oracle Database 11g: Fundamentos de SQL II 5 - 24


Faculdade Impacta Tecnologia

FROM_TZ

Exiba o valor de TIMESTAMP '2000-03-28 08:00:00' como


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

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;

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
FROM_TZ
S am able
A function FROM_TZ
ZONE . inic s fer um valor de TIMESTAMP em um valor de TIMESTAMP WITH TIME
ius nconverte
V n-tra FROM_TZ é:
A sintaxe daofunction
n
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.

Oracle Database 11g: Fundamentos de SQL II 5 - 25


Faculdade Impacta Tecnologia

TO_TIMESTAMP
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

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;

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
TO_TIMESTAMP
S am able
i c iusem um
A function TO_TIMESTAMP
s f er converte uma string de CHAR, VARCHAR2, NCHAR ou o tipo de dados

V i n tran
de NVARCHAR2 valor do tipo de dados TIMESTAMP. A sintaxe da function
TO_TIMESTAMP n- é:
noTO_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).

Oracle Database 11g: Fundamentos de SQL II 5 - 26


Faculdade Impacta Tecnologia

TO_YMINTERVAL
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

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;
s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
TO_YMINTERVAL
S am able
s fer converte uma string de caracteres de CHAR, VARCHAR2, NCHAR, ou
A function TO_YMINTERVAL
iuNVARCHAR2
tipo de dados
i c
n trans em um tipo de dados de INTERVAL YEAR TO MONTH. O tipo de
i de
V
dados de INTERVAL
n - YEAR TO MONTH armazena um período usando os campos de data/horário
n o
YEAR e 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.

Oracle Database 11g: Fundamentos de SQL II 5 - 27


Faculdade Impacta Tecnologia

TO_DSINTERVAL
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

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;

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
… a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
TO_DSINTERVAL
S am able
s converteruma string de caracteres de CHAR, VARCHAR2, NCHAR, ou de tipo de
iciu ansemfeum tipo de dados de INTERVAL DAY TO SECOND.
TO_DSINTERVAL
dados dein
NVARCHAR2
V n-slide,
No exemploodo
tr a data de 100 dias e 10 horas após a contratação é obtida.
n

Oracle Database 11g: Fundamentos de SQL II 5 - 28


Faculdade Impacta Tecnologia

Horário de Verão
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

• 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.

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
DST (Horário de Verão)
S am able
i c us ocidentais
A maioria dos países
i s f er avança o relógio uma hora durante os meses de verão. O período é
chamadoinde horárioade
r n verão. O horário de verão compreende o primeiro domingo de abril até o
últimoVdomingon - t
de outubro na maioria dos Estados Unidos, México e Canadá. Os países da União
n 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.

Oracle Database 11g: Fundamentos de SQL II 5 - 29


Faculdade Impacta Tecnologia

DST (Horário de Verão) (continuação)


ERROR_ON_OVERLAP_TIME
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.
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

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.

a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no

Oracle Database 11g: Fundamentos de SQL II 5 - 30


Faculdade Impacta Tecnologia

Quiz

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


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

1. Um deslocamento relativo
2. Fuso horário do banco de dados
3. Fuso horário local do SO
4. Uma região nomeada

a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in Oracle.eTodos
Copyright © 2009,
( t os direitos reservados.
s
p aio licen
Respostas: 2, 3, 4 am le
S a b
i c ius nsfer
Vin n-tra
no

Oracle Database 11g: Fundamentos de SQL II 5 - 31


Faculdade Impacta Tecnologia

Resumo
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

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


• CURRENT_DATE
• CURRENT_TIMESTAMP
• LOCALTIMESTAMP
• DBTIMEZONE
• SESSIONTIMEZONE
• EXTRACT
• TZ_OFFSET
• s a
FROM_TZ a
)h ฺ
• TO_TIMESTAMP m
co uide
i l ฺ
• TO_YMINTERVAL
g ma nt G
• TO_DSINTERVAL
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Resumo
S am able
i desalgumas
Esta lição tratau
f r functions de data/horário disponíveis no banco de dados Oracle.
edas
i c s
Vin n-tran
no

Oracle Database 11g: Fundamentos de SQL II 5 - 32


Faculdade Impacta Tecnologia

Exercício 5: Visão Geral


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

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

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
am able
Exercício 5: Visão Geral
S
Neste exercício, s exibe
iuvocê f r deslocamentos de fuso horário, CURRENT_DATE,
os
ee LOCALTIMESTAMP.
i i c
n tran
CURRENT_TIMESTAMP s Define também os fusos horários e usa a function
V
EXTRACT. n-
no

Oracle Database 11g: Fundamentos de SQL II 5 - 33


Faculdade Impacta Tecnologia

Exercício 5
1. Altere a sessão para definir NLS_DATE_FORMAT como DD-MON-YYYY HH24:MI:SS.
2. a. Crie consultas para exibir os deslocamentos do fuso horário (TZ_OFFSET) para os
seguintes fusos horários.
- EUA/Pacífico-Novo
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

- Cingapura

- Egito
s a
)h ฺa
m
co uide
i l ฺ
g ma nt G
b. Altere a sessão a fim de definir o valor do parâmetroio @ udepara o deslocamento
p is St
a TIME_ZONE
do fuso horário de EUA/Pacífico-Novo. m
sa e ethLOCALTIMESTAMP para
c. Exiba CURRENT_DATE, CURRENT_TIMESTAMP s l
esta sessão.
i n iciu to us
i o (v nse
p a lice
S am able
i c iuassessãos f efimr de definir o valor do parâmetro TIME_ZONE para o deslocamento
d. n
Altere
Vi do fuso- t r an de Cingapura.
horário
a

e. n on CURRENT_DATE, CURRENT_TIMESTAMP e LOCALTIMESTAMP para


Exiba
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_TIMESTAMP e LOCALTIMESTAMP dependem do fuso horário da sessão.
3. Crie uma consulta para exibir DBTIMEZONE e SESSIONTIMEZONE.

Oracle Database 11g: Fundamentos de SQL II 5 - 34


Faculdade Impacta Tecnologia

Exercício 5 (continuação)
4. Crie uma consulta para extrair YEAR da coluna HIRE_DATE da tabela EMPLOYEES para os
funcionários que trabalham no departamento 80.
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

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.

s a
a
) h Selecione
b. Modifique o tipo de dados da coluna DATE_COL e altere-o para TIMESTAMP. m
co uideฺ
na tabela para exibir os dados. i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
c. Tente modificar o tipo de dadosic daiu
s us e
coluna DATE_COL e altere-o para TIMESTAMP WITH
i n t o
TIME ZONE. O que acontece?
i o (v nse
p a lice
7. Crie uma consulta m recuperar
apara b le os sobrenomes com base na tabela EMPLOYEES e calcular o
status da u
S a
s fSeero ano de contratação for 1998, exiba Needs Review para o status da
i c iavaliação.
s
V i n trancontrário,
avaliação, caso exiba not this year! Nomeie a coluna de status da avaliação
como Review.
o n - Classifique os resultados pela coluna HIRE_DATE.
n
Dica: Use uma expressão CASE com a function EXTRACT para calcular o status da avaliação.

Oracle Database 11g: Fundamentos de SQL II 5 - 35


Faculdade Impacta Tecnologia

Exercício 5 (continuação)
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no

Oracle Database 11g: Fundamentos de SQL II 5 - 36


Faculdade Impacta Tecnologia

Exercício 5 (continuação)
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!
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Classifique os resultados pela coluna HIRE_DATE. Use a tabela EMPLOYEES.


Dica: Use as expressões CASE e TO_YMINTERVAL.

a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no

Oracle Database 11g: Fundamentos de SQL II 5 - 37


Faculdade Impacta Tecnologia
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no

Você também pode gostar