SYSDATE complicado

Este forum é dedicado a códigos errados que se encontram por aí, ou seja, coisas que não se deve fazer de jeito nenhum! Não coloque neste forum dúvidas! (apenas situações bizarras do nosso dia a dia :-)
Responder
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

De vez em quando eu encontro um select assim pra buscar o SYSDATE:

Selecionar tudo

SELECT SYSDATE
INTO variavel
FROM DUAL;
Talvez a pessoa não sabia que basta colocar SYSDATE em qualquer lugar do SQL ou do PLSQL que a data vem sem problemas...

Selecionar tudo

variavel := SYSDATE; 
Abaixo, deixo novamente um caso encontrado em programas reais!
Esse cursor conseguiu superar o SELECT acima!

Selecionar tudo

DECLARE
  CURSOR CDT IS
    SELECT SYSDATE DAT
    FROM DUAL;
  VDATA  DATE;
BEGIN
  OPEN  CDT;
  FETCH CDT INTO VDATA;
  CLOSE CDT;
END;
Foi feito um cursor pra apenas saber a data!
NaPraia
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 88
Registrado em: Sex, 22 Fev 2008 8:24 am
Localização: Floripa - SC

esse do cursor matou a pau
como o primeiro select eu já tinha visto.
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

isso já vi muito... trabalhei com um cara q dizia que no forms se não tivesse o select into pro sysdate ele retornava a hora local da maquina, e não a hora do servidor...


um abrç
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Uma vez eu rodei um TRACE que tinha uns sysdates.
Pelo que eu me lembre, o Forms faz implicitamente um select from dual. (posso estar enganado com isso, mas que eu me lembre ele faz exatamente isso).

Ou seja, a hora é do servidor.
Mas o caso é que não é necessário fazer um SELECT from DUAL no forms...Só polui o código!
Avatar do usuário
gpilger
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Qua, 21 Abr 2010 3:34 pm
Localização: Novo Hamburgo - RS
Gilson Pilger
"Por não saber que erra impossível, ele foi lá e fez" autor desconhecido

E porque não usar o FOR? Tem gente que se presta em dar um OPEN, FETCH, e CLOSE, criar mil variáveis quando um FOR simplifica tudo..


Usando FETCH INTO

Selecionar tudo

declare

  cursor c_cur is
    select 'Ivoti', 'Novo Hamburgo', 'Dois Irmãos' from dual;

  v_cid_nome1 varchar2(30);
  v_cid_nome2 varchar2(30);
  v_cid_nome3 varchar2(30);

begin

  open c_cur;
  loop
    fetch c_cur
      into v_cid_nome1, v_cid_nome2, v_cid_nome3;
  
    update cidades set nome = v_cid_nome1 where codigo = 1;
    update cidades set nome = v_cid_nome2 where codigo = 2;
    update cidades set nome = v_cid_nome3 where codigo = 3;
  
    exit when c_cur%NOTFOUND;
  
  end loop;
  close c_cur;

  commit;

end;
Usando FOR

Selecionar tudo

declare
begin

  for r_cur in (select 'Ivoti' cid1, 'Novo Hamburgo' cid2, 'Dois Irmãos' cid3 from dual)
  loop
  
    update cidades set nome = r_cur.cid1 where codigo = 1;
    update cidades set nome = r_cur.cid2 where codigo = 2;
    update cidades set nome = r_cur.cid3 where codigo = 3;

  end loop;
  commit;

end;
Mas é claro que os dois funcionam, mas convenhamos que fica bem mais clean.

Abraços
ricards
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 52
Registrado em: Sáb, 29 Set 2007 12:59 am
Localização: Araraquara-SP
Contato:
Ricardo Neves
Analista e Instrutor Oracle Developer
Java Developer (JPA/JSF/Hibernate/WebServices/EJB)

Fala pessoal beleza?

No forms 6i e reports 6i temos o problema do sysdate usar a data e hora da máquina é um bug da ferramenta, com isso a idéia é sempre criar uma função no BD e utilizá-las no forms e reports.

A partir das novas versão esse problema foi corrigido.

Tive esse problema em uma empresa que trabalhei com forms 6i.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 5 visitantes