web-dev-qa-db-ja.com

Oracle SQLは存在する場合はtrueを返します

特定の要素がテーブルに存在するかどうかを確認する方法-trueまたはfalseを返すにはどうすればよいですか?

私が持っているテーブルがあります

  • ユーザーID
  • ユーザーのパスワード
  • user_secretQ

口頭で、私はこれをしたい:特定のuser_iduser_id列の場合はtrueを返し、そうでない場合はfalseを返します。

19
Matt

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

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;
9
Tony Andrews

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のクエリが好きです。

8

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

3
grokster

または、これを行うことができます:

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