Dúvida com trunc

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Moloukos
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Qui, 18 Set 2008 10:22 pm
Localização: São Paulo - SP
Moloukos Rox

Boa tarde.

Poderiam explicar porque esse update abaixo funciona em alguns casos e outros não:

Selecionar tudo

    UPDATE MSA.TEXEMPLO
       SET ID_TSE = 10, 
           DATA = SYSDATE
     WHERE ID = P_ID;
Fiz o trunc na data e agora funciona em todos os casos:

Selecionar tudo

    UPDATE MSA.TEXEMPLO
       SET ID_TSE = 10, 
           DATA = trunc(SYSDATE)
     WHERE ID = P_ID;
Poderiam explicar como o oracle entende as datas e a função específica do trunc.
maxwbh
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 21 Out 2014 5:16 pm
Localização: Belo Horizonte - MG
Maxwell da Silva Oliveira
(31) 9325.7479/ 9474.8854
maxwbh@gmail.com
http://lnkd.in/PkcQ5y

Moloukos , Boa noite.
Qual é o erro?
Qual é o tipo e tamanho do campo data ?

SYSDATE retorna um DATE TIME, o TRUNC elimina o TIME deixando somente a parte DATE .
Exemplo :

Selecionar tudo

       SYSDATE = 30/06/2015 21:25:30.452
       TRUNC(SYSDATE) = 30/06/2015
Moloukos
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Qui, 18 Set 2008 10:22 pm
Localização: São Paulo - SP
Moloukos Rox

O problema é que as vezes a data grava e em outras não.

Outro exemplo seria:

Selecionar tudo

UPDATE MSA.TEXEMPLO
SET ID_TSE = 10 
where DATA = trunc(SYSDATE);
ou

Selecionar tudo

UPDATE MSA.TEXEMPLO
SET ID_TSE = 10 
where DATA = SYSDATE;
Esse exemplo, as vezes o update é feito e em outras não.

No material que estudei, sempre vi que o oracle considera data e hora em todas as gravações. É correto isso?
maxwbh
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 21 Out 2014 5:16 pm
Localização: Belo Horizonte - MG
Maxwell da Silva Oliveira
(31) 9325.7479/ 9474.8854
maxwbh@gmail.com
http://lnkd.in/PkcQ5y

Moloukos,
o erro é no momento da criação do registro.
Como é feito a criação ?
Moloukos
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Qui, 18 Set 2008 10:22 pm
Localização: São Paulo - SP
Moloukos Rox

maxwbh,

Não entendi o porque de ser no momento da criação do registro.

O problema é justamente no momento que a proc é executada e dentro dela existe esse update.

Essa proc é chamada apenas para atualizar um id_tse. As vezes funciona as vezes não.

Colocando o trunc passou a funcionar todas as vezes.
maxwbh
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 21 Out 2014 5:16 pm
Localização: Belo Horizonte - MG
Maxwell da Silva Oliveira
(31) 9325.7479/ 9474.8854
maxwbh@gmail.com
http://lnkd.in/PkcQ5y

O problema ocorre é quando o dado é gravado na tabela.
Se na tabela esta "30/06/2015" só vai funcionar com o TRUNC;
Lembre que SYSDATE é a Data atual, se passar 1 segundo apos a gravação os valores são diferentes.
Responder
  • Informação
  • Quem está online

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