Mat*_*att 19 sql oracle if-statement exists
如何检查表中是否存在特定元素 - 如何返回true或false?
我有一张桌子
口头上,我想这样做:如果列中user_id存在特定的user_id,则返回true - 否则返回false.
DCo*_*kie 43
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';
Run Code Online (Sandbox Code Playgroud)
在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;
Run Code Online (Sandbox Code Playgroud)
这将用于调用PL/SQL,如下所示:
if user_exists('john') then
dbms_output.put_Line('John exists');
end if;
Run Code Online (Sandbox Code Playgroud)
注意:我在查询中使用了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;
Run Code Online (Sandbox Code Playgroud)
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')
Run Code Online (Sandbox Code Playgroud)
我喜欢@ DCookie的查询.