如果存在问题,Oracle sql返回true

时间:2010-11-04 16:22:21

标签: sql oracle if-statement exists

如何检查表中是否存在特定元素 - 如何返回true或false?

我有一张表

  • USER_ID
  • USER_PASSWORD
  • user_secretQ

口头上,我想这样做:如果user_id列中存在特定的user_id,则返回true - 否则返回false。

5 个答案:

答案 0 :(得分:42)

Oracle SQL中没有布尔类型。您将需要返回1或0或其他一些并相应地采取行动:

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

答案 1 :(得分:9)

在PL / SQL中你可以这样做:

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;

这将用于调用PL / SQL,如下所示:

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

注意:我在查询中使用了count(*),知道在主键搜索的情况下这只会返回1或0。如果可能有多行,那么我会在查询中添加“和rownum = 1”,以防止不必要地计算许多记录,只是为了找出是否存在:

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;

答案 2 :(得分:8)

Oracle RDBMS没有布尔数据类型,您只能在PL / SQL中使用布尔变量。

如果您只想返回字符串'TRUE'和'FALSE' 你可以这样做..

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

我喜欢@ DCookie的查询。

答案 3 :(得分:3)

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

答案 4 :(得分:3)

或者你可以这样做:

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