Função pertence

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
Robson Costa
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 155
Registrado em: Sex, 17 Out 2008 6:05 pm
Localização: Campo Grande - MS

Alguém poderia dar uma idéia de uma função que passado um valor retorna um valor indicando se ele está ou não em uma tabela
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP
Ricardo H. Tajiri

o operador IN não resolve?
Robson Costa
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 155
Registrado em: Sex, 17 Out 2008 6:05 pm
Localização: Campo Grande - MS

OBrigado, mas já encontrei a solução
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Nos relate como procedeu.
Robson Costa
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 155
Registrado em: Sex, 17 Out 2008 6:05 pm
Localização: Campo Grande - MS

eu queria uma função que dado um parâmetro, verificava se já existe em uma tabela. Estava com problemas quando passava um parâmetro que não existia na tabela e a função deveria me devolver 0. A solução que encontrei foi no select que verificava se o parâmetro estava na tabela, eu dei um count e armazenava o resultado em uma variável. Aí se o parâmetro não existisse na tabela, a variável tinha armazenado 0.
Mais ou menos assim:

Selecionar tudo

function f (parametro)...
select count(*)
into total
from tabela
where parametro = coluna;
return total
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5018
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

Vou me meter :-D

Então, sua função funciona, mas é uma coisa perigosa se for usada muito OU ainda mais se sua tabela tiver milhões de linhas.

Se o seu objetivo é apenas saber se um registro existe ou não, você não precisa CONTAR quantas ocorrencias tem na tabela toda. Isso sobrecarrega a toa o banco.

Eu faria usando um CURSOR, daí no primeiro fetch eu testava se deu NOT FOUND. Se deu not-found, a linha não existe. Caso contrário, a linha existe.

Outra forma é fazer um select from DUAL com EXISTS.
Algo assim:

Selecionar tudo

SELECT 1
INTO var
FROM DUAL
WHERE EXSITS (seu select aqui).
Dessa forma, se tiver alguma linha vai retornar 1. Se não existir nenhuma linha, vai cair no exception WHEN NO_DATA_FOUND.

:-o
Robson Costa
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 155
Registrado em: Sex, 17 Out 2008 6:05 pm
Localização: Campo Grande - MS

Obrigado pela dica

Mas era para uma solução rápida e que iria ser rodado apenas uma vez.
Responder
  • Informação
  • Quem está online

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