web-dev-qa-db-fra.com

Oracle sql retourne vrai s'il existe une question

Comment puis-je vérifier si un élément particulier existe dans une table - comment puis-je retourner vrai ou faux?

J'ai une table qui a

  • identifiant d'utilisateur
  • mot de passe de l'utilisateur
  • user_secretQ

Verbalement, je veux faire ceci: si un user_id Particulier existe dans la colonne user_id, Alors retourne vrai - sinon retourne faux.

19
Matt

Il n'y a pas de type booléen dans Oracle SQL. Vous devrez renvoyer un 1 ou un 0, ou certains et agir en conséquence:

SELECT CASE WHEN MAX(user_id) IS NULL THEN 'NO' ELSE 'YES' END User_exists
  FROM user_id_table
 WHERE user_id = 'some_user';
43
DCookie

En PL/SQL, vous pouvez faire ceci:

function user_exists (p_user_id users.user_id%type) return boolean
is
  l_count integer;
begin
  select count(*)
  into   l_count
  from   users
  where  user_id = p_user_id;

  return (l_count > 0);
end;

Cela serait ensuite utilisé pour appeler PL/SQL comme ceci:

if user_exists('john') then
  dbms_output.put_Line('John exists');
end if;

REMARQUE: j'ai utilisé count (*) dans la requête en sachant que cela ne renverra que 1 ou 0 dans le cas d'une recherche de clé primaire. S'il pouvait y avoir plus d'une ligne, j'ajouterais "et rownum = 1" à la requête pour éviter de compter inutilement de nombreux enregistrements juste pour savoir s'il en existe:

function user_has_messages (p_user_id users.user_id%type) return boolean
is
  l_count integer;
begin
  select count(*)
  into   l_count
  from   messages
  where  user_id = p_user_id
  AND ROWNUM = 1;

  return (l_count > 0);
end;
9
Tony Andrews

Oracle RDBMS n'a pas de type de données booléen, vous ne pouvez utiliser que des variables booléennes en PL/SQL.

Si vous souhaitez simplement renvoyer les chaînes "TRUE" et "FALSE", vous pouvez le faire.

SELECT 'TRUE'  FROM DUAL WHERE EXISTS (SELECT 'x' FROM  table WHERE user_id = 'id')
UNION
SELECT 'FALSE' FROM DUAL WHERE NOT EXISTS (SELECT 'x' FROM  table WHERE user_id = 'id')

J'aime bien la requête de @ DCookie.

8
Johnbabu Koppolu

select count(*) from table where userid = :userid and rownum <= 1); -- If exists then 1 else 0

3
grokster

Ou vous pouvez le faire:

select decode(max(USER_ID), null, 'FALSE', 'TRUE') BOOL_VAL
from USER_TABLE where USER_ID = [some USER_ID here]
3
mk.chan