Kaolapso 0 Denunciar post Postado Janeiro 18, 2012 Pessoal, tenho uma procedure que retorna um cursor, porem surgiu a necessidade de não se permitir que o cursor retorne vazio. Vou postar o código da minha proc aqui e se puderem me ajudar a resolver este problema, agradeço. PROCEDURE PRC_RETORNA_CURSOR ( COD_ENTRADA IN NUMBER, PCURSOR OUT cursor_type) IS BEGIN -- SELECT OPEN PCURSOR FOR SELECT CAMPOA, CAMPOB, CAMPOC FROM TABELA WHERE COD_TABELA = COD_ENTRADA; END PRC_RETORNA_CURSOR; Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Janeiro 18, 2012 Tente algo assim PROCEDURE PRC_RETORNA_CURSOR ( COD_ENTRADA IN NUMBER, PCURSOR OUT cursor_type) IS vn_qtd number; BEGIN SELECT count(*) into vn_qtd FROM TABELA WHERE COD_TABELA = COD_ENTRADA; if vn_qtd = 0 then raise_application_error(-20001,'Select retornando sem dados !!!'); end if; -- SELECT OPEN PCURSOR FOR SELECT CAMPOA, CAMPOB, CAMPOC FROM TABELA WHERE COD_TABELA = COD_ENTRADA; END PRC_RETORNA_CURSOR; Compartilhar este post Link para o post Compartilhar em outros sites
Kaolapso 0 Denunciar post Postado Janeiro 18, 2012 Obrigado Motta, pensei em fazer algo desse tipo, inclusive em algumas procs já estou fazendo, o problema é pode ter alguma tabela no meu escopo que contenha muitos registros, e se fizer isso, estaria executando o select duas vezes, sacrificando a performance. Será que existe alguma outra forma, tipo utilizando WHEN_NOT_EXISTS, ou algo do genero? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Janeiro 18, 2012 De fato, a execução seria 2 vezes. Não pois o erro terá de ser tratado na rotina que abrisse. Mas em todo caso tente PROCEDURE PRC_RETORNA_CURSOR ( COD_ENTRADA IN NUMBER, PCURSOR OUT cursor_type) IS BEGIN -- SELECT OPEN PCURSOR FOR SELECT CAMPOA, CAMPOB, CAMPOC FROM TABELA WHERE COD_TABELA = COD_ENTRADA; EXCEPTION WHEN NO_DATA_FOUND THEN raise_application_error(-20001,'Select retornando sem dados !!!'); END PRC_RETORNA_CURSOR; Compartilhar este post Link para o post Compartilhar em outros sites
Kaolapso 0 Denunciar post Postado Janeiro 18, 2012 Testei da forma que você mencionou mas não funciona. Ele apenas funciona quando eu troco o cursor por um "Select INTO variavel". Caso contrário, ele não entra na Exception. Caramba!!! Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Janeiro 18, 2012 É o esperado, a exceção deve ser tratada no objeto que chama o cursor, ou fazendo um teste antes. Se pensar outra solução posto aqui. Compartilhar este post Link para o post Compartilhar em outros sites