Para melhor visualização, recomendo resolução de no mínimo 1024 x 768 e navegador Mozilla Firefox


quarta-feira, 28 de maio de 2008

Utilizando a expressão INTERVAL com o Flashback Query no Oracle

Por Eduardo Legatti

Olá,

Este artigo é um complemento ao artigo Utilizando Flashback Query no Oracle 9i publicado em Maio de 2007 na qual o conteúdo do mesmo abordou a utilização do recurso de flashback query que permite visualizar os dados como eles estavam em um determinado tempo no passado. A dica que deixo aqui, apenas para salientar, é que também podemos utilizar a expressão INTERVAL ao utilizar a cláusula AS OF TIMESTAMP, ou sempre que necessário caso precisarmos utilizar funções de data como SYSDATE, SYSTIMESTAMP, CURRENT_TIMESTAMP, etc. 

SQL> set time on
09:23:14 SQL> create table t1 (id number);

Tabela criada.

09:23:33 SQL> insert into t1 values (1);

1 linha criada.

09:23:40 SQL> insert into t1 values (2);

1 linha criada.

09:23:42 SQL> insert into t1 values (3);

1 linha criada.

09:23:44 SQL> commit;

Validação completa.

09:23:47 SQL> update t1 set id=id*10;

3 linhas atualizadas.

09:27:17 SQL> commit;

Validação completa.

09:27:23 SQL> update t1 set id=id*20;

3 linhas atualizadas.

09:32:21 SQL> commit;

Validação completa.

-- Visão dos dados atuais armazenados na tabela T1
09:32:26 SQL> select * from t1 order by id;

       ID
----------
       200
       400
       600

-- Visão dos dados armazenados na tabela T1 há 5 minutos atrás
09:32:43 SQL> select * from t1
           2  as of timestamp (systimestamp - interval '5' minute) order by id;

       ID
----------
        10
        20
        30

-- Visão dos dados armazendados na tabela T1 há 7 minutos atrás
09:33:44 SQL> select * from t1
           2  as of timestamp (systimestamp - interval '7' minute) order by id;

       ID
----------
         1
         2
         3

Em resumo, podemos obter informações de dados de flashbask desejados entre intervalos de tempo utilizando a expressão INTERVAL:

SQL> select interval '1' year from dual;

INTERVAL'1'YEAR
----------------------------------------
+01-00

SQL> select interval '1' month from dual;

INTERVAL'1'MONTH
----------------------------------------
+00-01

SQL> select interval '1' day from dual;

INTERVAL'1'DAY
----------------------------------------
+01 00:00:00

SQL> select interval '1' hour from dual;

INTERVAL'1'HOUR
----------------------------------------
+00 01:00:00

SQL> select interval '1' minute from dual;

INTERVAL'1'MINUTE
----------------------------------------
+00 00:01:00

SQL> select interval '1' second from dual;

INTERVAL'1'SECOND
----------------------------------------
+00 00:00:01.000000

Google+

Nenhum comentário:

Postagens populares