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

如果存在问题,Oracle sql返回true,sql,oracle,if-statement,exists,Sql,Oracle,If Statement,Exists,如何检查表中是否存在特定元素?如何返回true或false 我有一张桌子 用户id 用户密码 用户加密 口头上,我想这样做:如果用户id列中存在特定的用户id,则返回true,否则返回false。Oracle SQL中没有布尔类型。您将需要返回1或0,或类似的值,并相应地执行以下操作: SELECT CASE WHEN MAX(user_id) IS NULL THEN 'NO' ELSE 'YES' END User_exists FROM user_id_table WHERE use

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

我有一张桌子

用户id 用户密码 用户加密
口头上,我想这样做:如果用户id列中存在特定的用户id,则返回true,否则返回false。

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

在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。如果可能有多行,则我将向查询中添加and 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;

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的查询。

从userid=:userid和rownum的表中选择count*,或者您可以这样做:

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

所需的输出字符串是或否,用户id为numberic如果要返回字符串,请根据该字符串编辑问题。表示YES或NO的字符串与返回true或false的字符串不同,后者是布尔值。它是否抛出错误?select语句是否在普通的旧SQL*Plus中工作?或者选择NVL2MAXuser_ID、'YES'、'NO'…内容为FALSE或TRUE的字符串不是布尔值。直到布尔值不是DDL的一部分