AJUDA COM CURSOR

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
edesignmga
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 23
Registrado em: Seg, 12 Jan 2009 2:01 pm
Localização: São Paulo - SP

Boa tarde pessoal, seguinte na minha aplicação preciso do seguinte: Assim que abrir o sistema caso a condição que passei seja atendida mostrar uma mensagem, segue o meu código:

Selecionar tudo

declare
   va_dt_cadastro cliente.dt_cadastro%type;
begin 
  select distinct add_months(DT_CADASTRO, 3)  
    into va_dt_cadastro
   from cliente;
   if va_dt_cadastro = sysdate then
      message('Existem planos que foram cadastrados a 17 meses atrás, e que estarão vencendo em 1 mês');
      message('Existem planos que foram cadastrados a 17 meses atrás, e que estarão vencendo em 1 mês');
end if;
end;
só que descobri que está dando um probleminha a resposta do meu select da mais de uma linha, alguém pode me ajudar a resolver esse problema? e quando abro o sistema ele não mostra a mensagem e da o erro dizendo que o select retorna mais de uma linha.
Desde já obrigado a todos.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5026
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

É que seu select não tem WHERE.
OU seja, ele retora de TODAS as linhas da sua tabela cliente.
Certamente vai dar erro.

Selecionar tudo

select distinct add_months(DT_CADASTRO, 3) 
    into va_dt_cadastro
   from cliente; 
Coloque um WHERE de modo que retorne apenas 1 linha que VAI BRILHAR :-)
edesignmga
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 23
Registrado em: Seg, 12 Jan 2009 2:01 pm
Localização: São Paulo - SP

hehehe valeu dr_gori , até tinha se passado pela minha cabeça
de se colocar um where ai mas não achei que fosse me ajudar muito rsrs
:D valeu pela ajuda!!!

vou tentar aqui e se funcionar dou um grito.....
RodrigoValentim
Moderador
Moderador
Mensagens: 367
Registrado em: Ter, 25 Mar 2008 3:41 pm
Localização: Salvador - BA
Rodrigo Valentim
Analista de Sistemas
Oracle Developer

Campanha: Faça uma pesquisa antes de perguntar!!!

Bom, eu nunca uso select into justamente por essas questões... se o select retornar null, dará erro de no_data_found então, preciso fazer da sequinte forma.

Selecionar tudo

declare 
   cursor cCad is
     select distinct add_months(DT_CADASTRO, 3)  
       from cliente; 

/*sem where mesmo.*/

   va_dt_cadastro cliente.dt_cadastro%type; 
begin 
  open cCad;
   fetch cCad into va_dt_cadastro;
  close cCad;
   if va_dt_cadastro = sysdate then 
      message('Existem planos que foram cadastrados a 17 meses atrás, e que estarão vencendo em 1 mês'); 
      message('Existem planos que foram cadastrados a 17 meses atrás, e que estarão vencendo em 1 mês'); 
end if; 
end;
Caso deseje, você ainda pode por o where ou, utilizar o for loop
Responder
  • Informação
  • Quem está online

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