Procedure

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
nostradomus
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Sáb, 13 Nov 2010 7:44 pm
Localização: porto

Boas,
tenho a seguinte questão para revolver:

"Procedimento que, altere a situação para 1 das requisições que ultrapassaram a data limite de devolução."

o meu código é:

Selecionar tudo

create or replace PROCEDURE Atrazado (
p_cod_situacao g2a_requisicao.cod_situacao%type)
begin
  if g2a_requisicao.data_prazo < sysdate and cod_situacao =0 then
    update g2a_requisicao
    set cod_situacao:=p_cod_situacao
    where data_prazo < sysdate and cod_situacao =0
  end if;
end atrazados;
mas infelizmente não dá nada, ou melhor apenas dá erros.
será que alguém pode dar uma vista de olhos:

Agradecido
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP
Ricardo H. Tajiri

Falta você passar como parâmetro o campo g2a_requisicao.data_prazo que está utilizando no IF. Outro problema é o ":=" no update, o correto é só deixar "=".


Pela descrição do seu problema, você poderia fazer direto em SQL:

Selecionar tudo

    update g2a_requisicao
        set cod_situacao =1
    where data_prazo > sysdate 
        and cod_situacao = 0; 
Veja que como você especificou que quer alterar as datas que já "venceram", então o correto é usar "where data_prazo > sysdate" e não "where data_prazo < sysdate" como você está fazendo...
nostradomus
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Sáb, 13 Nov 2010 7:44 pm
Localização: porto

Boas,
sim poderia fazer directamente no SQL, mas o problema é mesmo fase-lo com um procedure.
Quanto À questão do < ou > a data do sistema deve ser maior que a data de devolução só assim sei que ultrapassou o prazo e não ao contrario.

Cumprimentos.
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP
Ricardo H. Tajiri

Boa noite nostradamus,
poderia fazer directamente no SQL, mas o problema é mesmo fase-lo com um procedure.
Pelo update que você está utilizando dentro da procedure, não existe a necessidade de usar o IF, ficando assim:

Selecionar tudo

create or replace PROCEDURE Atrazado (
p_cod_situacao g2a_requisicao.cod_situacao%type)
begin
    update g2a_requisicao
    set cod_situacao:=p_cod_situacao
    where data_prazo < sysdate and cod_situacao =0;
end atrazados;
Quanto À questão do < ou > a data do sistema deve ser maior que a data de devolução só assim sei que ultrapassou o prazo e não ao contrario.
Você está certo, eu que comi bola... :D
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante