Função pertence
-
- 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
-
- 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
-
- 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:
Mais ou menos assim:
function f (parametro)...
select count(*)
into total
from tabela
where parametro = coluna;
return total
- dr_gori
- 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
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Vou me meter 
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:
Dessa forma, se tiver alguma linha vai retornar 1. Se não existir nenhuma linha, vai cair no exception WHEN NO_DATA_FOUND.


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:
SELECT 1
INTO var
FROM DUAL
WHERE EXSITS (seu select aqui).

-
- 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.
Mas era para uma solução rápida e que iria ser rodado apenas uma vez.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes