Oracle sql return true if exists question

后端 未结 5 1273
清酒与你
清酒与你 2021-01-03 21:12

How do I check if a particular element exists in a table - how can I return true or false?

I have a table that has

  • user_id
  • user_password
相关标签:
5条回答
  • 2021-01-03 21:30

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

    0 讨论(0)
  • 2021-01-03 21:38

    In PL/SQL you can do this:

    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;
    

    This would then be used in calling PL/SQL like this:

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

    NOTE: I used count(*) in the query in the knowledge that this will only return 1 or 0 in the case of a primary key search. If there could be more than one row then I would add "and rownum = 1" to the query to prevent unnecessarily counting many records just to find out if any exists:

    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;
    
    0 讨论(0)
  • 2021-01-03 21:42

    Or you could do this:

    select decode(max(USER_ID), null, 'FALSE', 'TRUE') BOOL_VAL
    from USER_TABLE where USER_ID = [some USER_ID here]
    
    0 讨论(0)
  • 2021-01-03 21:47

    Oracle RDBMS does not have boolean data type, you can only use boolean variables in PL/SQL.

    If you simply want to return strings 'TRUE' and 'FALSE' you can do this..

    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')
    

    I like @DCookie's query though.

    0 讨论(0)
  • 2021-01-03 21:53

    There is no Boolean type in Oracle SQL. You will need to return a 1 or 0, or some such and act accordingly:

    SELECT CASE WHEN MAX(user_id) IS NULL THEN 'NO' ELSE 'YES' END User_exists
      FROM user_id_table
     WHERE user_id = 'some_user';
    
    0 讨论(0)
提交回复
热议问题