Update com sysdate

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
leo_analista
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 24
Registrado em: Qua, 23 Mar 2016 9:45 am

Boa tarde.

Uma dúvida técnica gente.
Como faço um update de uma coluna inserindo um sysdate?
Tenho o código do update abaixo:

Selecionar tudo

update dbamv.tabela set 
obs1 = :ligar_t1.obs1,
dt_consulta = :ligar_t1.dt_consulta	,
dt_ligacao1 = :ligar_t1.dt_ligacao1,
ligar_n1 = :ligar_t1.ligar_n1
where nm_nome = :ligar_t1.nm_nome;
commit;
A coluna é essa

Selecionar tudo

dt_ligacao1 = :ligar_t1.dt_ligacao1
Obrigado a todos.

Léo
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

Bom dia,

A resposta parece muito simples ou eu não captei o problema...

Selecionar tudo

update dbamv.tabela set 
obs1 = :ligar_t1.obs1,
dt_consulta = :ligar_t1.dt_consulta   ,

dt_ligacao1 = sysdate,   --- < ------

ligar_n1 = :ligar_t1.ligar_n1
where nm_nome = :ligar_t1.nm_nome;
commit;
leo_analista
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 24
Registrado em: Qua, 23 Mar 2016 9:45 am

spernega escreveu:Bom dia,

A resposta parece muito simples ou eu não captei o problema...

Selecionar tudo

update dbamv.tabela set 
obs1 = :ligar_t1.obs1,
dt_consulta = :ligar_t1.dt_consulta   ,

dt_ligacao1 = sysdate, -----<<--------- HERE

ligar_n1 = :ligar_t1.ligar_n1
where nm_nome = :ligar_t1.nm_nome;
commit;

Cara eu tb achei que era simples...
Já tinha feito isso e NÃO está salvando, muito estranho isso.
Já tentei

Selecionar tudo

to_char(sysdate,'dd/mm/yyyy')
e nada!!!

Quando faz o update ele deixa NULL essa coluna de data...ele salva os outros dados porem a data não...

Vou colocar aqui todo o código do botão.

Selecionar tudo

declare 
	alerta number;
	
begin
	
	if :ligar_t1.obs1 is null or :ligar_t1.ligar_n1 is null then 
		alerta := show_alert('campo_nulo');
	else
		alerta := show_alert('campo_não_nulo');		
	
	update tabela_nome set 
			 obs1 = :ligar_t1.obs1,
			 dt_consulta = :ligar_t1.dt_consulta	,
			 dt_ligacao1 = sysdate,
			 ligar_n1 = :ligar_t1.ligar_n1
where nm_nome = :ligar_t1.nm_nome;
commit;

 :ligar_t1.nm_nome   		:= null;
 :ligar_t1.tel1				:= null;
 :ligar_t1.tel2				:= null;
 :ligar_t1.cd_cidade			:= null; 
 :ligar_t1.sexo				:= null;
 :ligar_t1.dt_preenchimento:= null;
 :ligar_t1.dt_cadastro		:= null;
 :ligar_t1.obs1				:= null;
 :ligar_t1.dt_consulta		:= null;
 :ligar_t1.ligar_n1			:= null;
		
		end if;
	end;

Valeu pela força!!!

Léo
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

Vamos tentar de outro jeito,

Tenta colocar um exception no procedimento pra ver se está dando algum erro.
e
Veja se existe alguma TRIGGER de base na tabela.
leo_analista
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 24
Registrado em: Qua, 23 Mar 2016 9:45 am

spernega escreveu:Vamos tentar de outro jeito,

Tenta colocar um exception no procedimento pra ver se está dando algum erro.
e
Veja se existe alguma TRIGGER de base na tabela.
Bom dia!!!

Spernega sou bem novo em forms, tem como você me dar uma mão pra fazer esse exception.

É algo como isso?

Selecionar tudo

exception 
     when :ligar_t1.dt_ligacao1 is null then
      message ('TESTANDO ERRO.') ;
     raise form_trigger_failure; 
Implementando depois do end if e antes do end?

Valeu cara!!!

Léo
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

Isso mesmo, logo antes do END;

Você verificou se existe alguma TRIGGER de base nesta tabela?
leo_analista
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 24
Registrado em: Qua, 23 Mar 2016 9:45 am

spernega escreveu:Isso mesmo, logo antes do END;

Você verificou se existe alguma TRIGGER de base nesta tabela?
Coloquei assim:

Selecionar tudo

exception 
when others then
message ('TESTANDO ERRO.') ;
raise form_trigger_failure; 
Não deu nada...
Passou direto, fez o update porem o campo de data vazio...

Não tem nenhum trigger nessa tabela.
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

Tenta executar assim:

pode ser que o UPDATE não esteja localizando nenhum registro.

Selecionar tudo

declare 
   alerta number;
begin
   if :ligar_t1.obs1 is null or :ligar_t1.ligar_n1 is null then 
      alerta := show_alert('campo_nulo');
   else
      alerta := show_alert('campo_não_nulo');      
      --         
      update tabela_nome set 
      obs1 = :ligar_t1.obs1,
      dt_consulta = :ligar_t1.dt_consulta   ,
      dt_ligacao1 = sysdate,
      ligar_n1 = :ligar_t1.ligar_n1
      where nm_nome = :ligar_t1.nm_nome;
      --
      if sql%notfound then
         message ('Nenhum registro localizado') ;
         pause;
      else
         message (sql%rowcount||' registros localizados');
         pause;
      end if;
      --
      commit;
      --
      :ligar_t1.nm_nome         := null;
      :ligar_t1.tel1            := null;
      :ligar_t1.tel2            := null;
      :ligar_t1.cd_cidade         := null; 
      :ligar_t1.sexo            := null;
      :ligar_t1.dt_preenchimento:= null;
      :ligar_t1.dt_cadastro      := null;
      :ligar_t1.obs1            := null;
      :ligar_t1.dt_consulta      := null;
      :ligar_t1.ligar_n1         := null;
   end if;
exception 
 when others then
  message ('TESTANDO ERRO.') ;
  raise form_trigger_failure;
end;
leo_analista
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 24
Registrado em: Qua, 23 Mar 2016 9:45 am

msg01.JPG
spernega escreveu:Tenta executar assim:

pode ser que o UPDATE não esteja localizando nenhum registro.

Selecionar tudo

declare 
   alerta number;
begin
   if :ligar_t1.obs1 is null or :ligar_t1.ligar_n1 is null then 
      alerta := show_alert('campo_nulo');
   else
      alerta := show_alert('campo_não_nulo');      
      --         
      update tabela_nome set 
      obs1 = :ligar_t1.obs1,
      dt_consulta = :ligar_t1.dt_consulta   ,
      dt_ligacao1 = sysdate,
      ligar_n1 = :ligar_t1.ligar_n1
      where nm_nome = :ligar_t1.nm_nome;
      --
      if sql%notfound then
         message ('Nenhum registro localizado') ;
         pause;
      else
         message (sql%rowcount||' registros localizados');
         pause;
      end if;
      --
      commit;
      --
      :ligar_t1.nm_nome         := null;
      :ligar_t1.tel1            := null;
      :ligar_t1.tel2            := null;
      :ligar_t1.cd_cidade         := null; 
      :ligar_t1.sexo            := null;
      :ligar_t1.dt_preenchimento:= null;
      :ligar_t1.dt_cadastro      := null;
      :ligar_t1.obs1            := null;
      :ligar_t1.dt_consulta      := null;
      :ligar_t1.ligar_n1         := null;
   end if;
exception 
 when others then
  message ('TESTANDO ERRO.') ;
  raise form_trigger_failure;
end;

Fiz aqui...
Olha os prints o que deu...
Apareceu uma msg no segundo print de POR FAVOR ACEITE, de onde saiu isso???...kkkk
To ficando doido!!!...kkk
Anexos
msg02.JPG
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

kkkkkkkk a mensagem é por causa do pause.

vou alterar um pouco o script e já te mando de novo
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

Tenta assim agora:
pra acompanhar os passos

Selecionar tudo

declare 
 alerta number;
 v_data_atualizada date;
begin
 if :ligar_t1.obs1 is null or :ligar_t1.ligar_n1 is null then 
    alerta := show_alert('campo_nulo');
 else
    alerta := show_alert('campo_não_nulo'); 
    -- 
    update tabela_nome set 
    obs1 = :ligar_t1.obs1,
    dt_consulta = :ligar_t1.dt_consulta ,
    dt_ligacao1 = sysdate,
    ligar_n1 = :ligar_t1.ligar_n1
    where nm_nome = :ligar_t1.nm_nome;
    --
    if sql%notfound then
       message ('Nenhum registro localizado') ;
       pause;
    else
       message (sql%rowcount||' registros localizados');
       pause;
       standard.commit;
       --
       If Form_Success Then
          message ('Update realizado');
          pause; 
          --
          begin
           select dt_ligacao1 into v_data_atualizada 
           from   tabela_nome
           where nm_nome = :ligar_t1.nm_nome;
           --
           message ('Data atualizada para '||to_char(v_data_atualizada ,'dd/mm/yyyy hh24:mi:ss'));
           pause; 
          exception
            when others then
             message ('Erro ao buscar date '||sqlerrm(sqlcode));
             pause; 
          end;
       else
          message ('erro no commit '||dbms_error_text);
          pause; 
       end if;
    end if;
    --
    :ligar_t1.nm_nome := null;
    :ligar_t1.tel1 := null;
    :ligar_t1.tel2 := null;
    :ligar_t1.cd_cidade := null; 
    :ligar_t1.sexo := null;
    :ligar_t1.dt_preenchimento:= null;
    :ligar_t1.dt_cadastro := null;
    :ligar_t1.obs1 := null;
    :ligar_t1.dt_consulta := null;
    :ligar_t1.ligar_n1 := null;
 end if;
exception 
when others then
message ('TESTANDO ERRO.') ;
raise form_trigger_failure;
end;
leo_analista
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 24
Registrado em: Qua, 23 Mar 2016 9:45 am

spernega escreveu:Tenta assim agora:
pra acompanhar os passos

Selecionar tudo

declare 
 alerta number;
 v_data_atualizada date;
begin
 if :ligar_t1.obs1 is null or :ligar_t1.ligar_n1 is null then 
    alerta := show_alert('campo_nulo');
 else
    alerta := show_alert('campo_não_nulo'); 
    -- 
    update tabela_nome set 
    obs1 = :ligar_t1.obs1,
    dt_consulta = :ligar_t1.dt_consulta ,
    dt_ligacao1 = sysdate,
    ligar_n1 = :ligar_t1.ligar_n1
    where nm_nome = :ligar_t1.nm_nome;
    --
    if sql%notfound then
       message ('Nenhum registro localizado') ;
       pause;
    else
       message (sql%rowcount||' registros localizados');
       pause;
       standard.commit;
       --
       If Form_Success Then
          message ('Update realizado');
          pause; 
          --
          begin
           select dt_ligacao1 into v_data_atualizada 
           from   tabela_nome
           where nm_nome = :ligar_t1.nm_nome;
           --
           message ('Data atualizada para '||to_char(v_data_atualizada ,'dd/mm/yyyy hh24:mi:ss'));
           pause; 
          exception
            when others then
             message ('Erro ao buscar date '||sqlerrm(sqlcode));
             pause; 
          end;
       else
          message ('erro no commit '||dbms_error_text);
          pause; 
       end if;
    end if;
    --
    :ligar_t1.nm_nome := null;
    :ligar_t1.tel1 := null;
    :ligar_t1.tel2 := null;
    :ligar_t1.cd_cidade := null; 
    :ligar_t1.sexo := null;
    :ligar_t1.dt_preenchimento:= null;
    :ligar_t1.dt_cadastro := null;
    :ligar_t1.obs1 := null;
    :ligar_t1.dt_consulta := null;
    :ligar_t1.ligar_n1 := null;
 end if;
exception 
when others then
message ('TESTANDO ERRO.') ;
raise form_trigger_failure;
end;


Cara agora foi...fez o update da data...sysdate!!!
Da uma olhada nos prints por favor.
Anexos
msg03.JPG
msg02.JPG
msg01.JPG
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

Bom, não deram todas as mensagens que coloquei, mas se fez é o que importa.

Talvez seja por que mudamos para standard.commit.
leo_analista
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 24
Registrado em: Qua, 23 Mar 2016 9:45 am

spernega escreveu:Bom, não deram todas as mensagens que coloquei, mas se fez é o que importa.

Talvez seja por que mudamos para standard.commit.

Mas o que exatamente fez o update do sysdate?
Continua sendo o dt_ligacao1 = sysdate?
Ou foi uma ajuda desse begin?

Selecionar tudo

begin
select dt_ligacao1 into v_data_atualizada 
from dbamv.bariatrica_hevv
where nm_paciente = :ligar_t1.nm_paciente;
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

o update gravou o sysdate (daquele momento) no campo dt_ligacao1.

Esse begin foi só pra verificar se o standard.commit foi realizado com sucesso e o campo atualizado na tabela.

Quando a gente executa um insert, update ou delete num forms, que é o seu caso, a gente usa o standard.commit ou seja, ele executa o commit apenas destas ações e mas não executa o commit das atualizações feitas nos blocos base table do forms.

Depois seria bom você revisar o forms, pra ver se há a necessidade deste update.

Se o seu bloco for base table, você poderia apenas atribuir o sysdate ao campo e dar um commit_form.
E se for base table, poderia estar dando conflito entre a tela e o update.
leo_analista
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 24
Registrado em: Qua, 23 Mar 2016 9:45 am

spernega escreveu:o update gravou o sysdate (daquele momento) no campo dt_ligacao1.

Esse begin foi só pra verificar se o standard.commit foi realizado com sucesso e o campo atualizado na tabela.

Quando a gente executa um insert, update ou delete num forms, que é o seu caso, a gente usa o standard.commit ou seja, ele executa o commit apenas destas ações e mas não executa o commit das atualizações feitas nos blocos base table do forms.

Depois seria bom você revisar o forms, pra ver se há a necessidade deste update.

Se o seu bloco for base table, você poderia apenas atribuir o sysdate ao campo e dar um commit_form.
E se for base table, poderia estar dando conflito entre a tela e o update.


Prezado spernega.

Muito obrigado pela atenção.

Você ajudou bastante.

Vou verificar o que você falou sobre o bloco.

Mais um vez obrigado!!!

Léo
leo_analista
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 24
Registrado em: Qua, 23 Mar 2016 9:45 am

spernega escreveu:o update gravou o sysdate (daquele momento) no campo dt_ligacao1.

Esse begin foi só pra verificar se o standard.commit foi realizado com sucesso e o campo atualizado na tabela.

Quando a gente executa um insert, update ou delete num forms, que é o seu caso, a gente usa o standard.commit ou seja, ele executa o commit apenas destas ações e mas não executa o commit das atualizações feitas nos blocos base table do forms.

Depois seria bom você revisar o forms, pra ver se há a necessidade deste update.

Se o seu bloco for base table, você poderia apenas atribuir o sysdate ao campo e dar um commit_form.
E se for base table, poderia estar dando conflito entre a tela e o update.

Prezado, encontrei uma coisa no standard.commit

Quando clico em atualizar o form faz a atualização, porem quando clico no botão sair e volto novamente nessa tela ele pede para salvar, acredito que é devido o standart.commit.

E quando clico em SIM em atualizar ele deleta a linha outrora atualizada.

Tem alguma dica?

Como faço para que quando volte na mesma tela ele não me mostre essa pergunta, DESEJA ATUALIZAR?

Valeu cara.
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

É por que o seu bloco é base table e você também está fazendo o update direto na tabela.
Ou seja, está fazendo duas vezes.

É melhor você tentar tratar só pelo bloco no FORMS sem o update.
leo_analista
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 24
Registrado em: Qua, 23 Mar 2016 9:45 am

spernega escreveu:É por que o seu bloco é base table e você também está fazendo o update direto na tabela.
Ou seja, está fazendo duas vezes.

É melhor você tentar tratar só pelo bloco no FORMS sem o update.
Desculpe a minha ignorância cara
Como seria feito esse tratamento no forms sem o update?
Sendo que estou exibindo os dados de um cadastro contido em uma tabela do banco e preciso atualizar esse caadastro com um update.
Novamente obrigado.
Léo
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

Quando você criou o bloco ligar_t1, foi com Data Block Wizard, referenciando uma tabela?

Na tela existe algum outro bolco base table que está sofrendo uma alteração ou inclusão.
Por isso pede pra salvar antes de sair.
leo_analista
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 24
Registrado em: Qua, 23 Mar 2016 9:45 am

spernega escreveu:Quando você criou o bloco ligar_t1, foi com Data Block Wizard, referenciando uma tabela?

Na tela existe algum outro bolco base table que está sofrendo uma alteração ou inclusão.
Por isso pede pra salvar antes de sair.
Esse é o escopo que tenho atualmente.

4 blocos
principal,
cadastro,
ligar_t1,
ligar_t2,
ligar_t3

Na principal não tem nada, apenas os botões para os blocos acima.

o cadastro eu vou fazer um cadastro de uma pessoa
no ligar_t1 eu vou visualizar esse cadastro por ordem de dt_cadastro e tenar falar com a pessoa...depois de tentar vou atualizar 2 campos o de observação e o de ligar de novo sim ou não.

os outros blocos não para as demais tentativas de ligar até a terceira vez.

Entendeu?

Depois que clico em salvar no bloco ligar_t1, clico em voltar...e a tela volta para a principal, que não tem nenhuma função de update, e se clicar novamente em ligar_t1 ele pede para atualizar, o que já tinha atualizado...

Ao entrar no bloco não tem nenhum update, o update só ativa quando clica no botão.

está tensoooooooo...kkkkkkkkkkkk

Valeu!!!
Anexos
tela.JPG
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

Leo,

Quer mandar este forms pra eu dar uma olhada?
Fica mais fácil de eu entender.

Tenta anexar na mensagem
leo_analista
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 24
Registrado em: Qua, 23 Mar 2016 9:45 am

spernega escreveu:Leo,

Quer mandar este forms pra eu dar uma olhada?
Fica mais fácil de eu entender.

Tenta anexar na mensagem

O site não aceita a extenção fmb como anexo.
Se não se importar, passa no privado seu e-mail que te mando...
Valeu!!!
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

Bom dia Leo,

Só pra gente encerrar este tópico, seguem as conclusões:

No FORMS, os blocos eram base table.
O UPDATE que estava sendo executado era redundante e causava conflito.

Eliminado o UPDATE os registros foram salvos.
Responder
  • Informação
  • Quem está online

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