Como verificar se a query retornou algum valor??

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
renatoal
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Ter, 07 Jul 2009 11:24 am
Localização: RJ

Alguém sabe uma forma eficiente de verificar se uma query retornou alguma linha ou não???

precisao fazer algo como:

se a consulta retorna alguma linha, realiza o update senao insere.


vlw abs
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!!!

use cursor, você pode fazer o seguinte

Selecionar tudo

declare
cursor c is
select sysdate 
  from dual;
dt date;
begin
open c;
  fetch c into dt;
  if c%found then
    (...)
  end if;
end;
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Se você estiver usando um select .. into .. e não tiver um cursor declarado, qualquer um dos dois jeitos funciona, dependendo do que você quer. Para cursor faz sentido usar <nomedocursor>%rowcount para saber quantas linhas ele retornou, select into vai dar sempre 1 quando voltar algo, senão é exception de qualquer jeito.

Selecionar tudo

Conectado a:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> set serveroutput on
SQL> declare
  2    v_num number;
  3  begin
  4    select 1 into v_num from dual;
  5    if sql%found then
  6      dbms_output.put_line('Achou (found)!');
  7    end if;
  8    if sql%rowcount >= 1 then
  9      dbms_output.put_line('Achou! (rowcount)');
 10    end if;
 11  end;
 12  /
Achou (found)!
Achou! (rowcount)

Procedimento PL/SQL concluído com sucesso.

SQL> 
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

sql%notfound funciona também, para testar se não retornou nada no fetch e interromper um loop usando "exit;" após testar num if por exemplo.
renatoal
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Ter, 07 Jul 2009 11:24 am
Localização: RJ

obrigado pela ajuda aí!

acabei usando o SQL%NOTFOUND , funcionou direitinho!!

vlw abs
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!!!

Tranquilo.. na verdade, cada rotina é usada em uma situação
Responder
  • Informação
  • Quem está online

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