特定の要素がテーブルに存在するかどうかを確認する方法-trueまたはfalseを返すにはどうすればよいですか?
私が持っているテーブルがあります
口頭で、私はこれをしたい:特定のuser_id
はuser_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;
注:主キー検索の場合に1または0のみを返すという知識で、クエリでcount(*)を使用しました。複数の行がある場合は、クエリに「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のクエリが好きです。
select count(*) from table where userid = :userid and rownum <= 1); -- If exists then 1 else 0
または、これを行うことができます:
select decode(max(USER_ID), null, 'FALSE', 'TRUE') BOOL_VAL
from USER_TABLE where USER_ID = [some USER_ID here]