Oracle sql возвращает true, если существует вопрос - PullRequest
19 голосов
/ 04 ноября 2010

Как проверить, существует ли определенный элемент в таблице - как я могу вернуть true или false?

У меня есть таблица, в которой есть

  • user_id
  • user_password
  • user_secretQ

В устной форме я хочу сделать следующее: если в столбце user_id существует определенный user_id, вернуть true - в противном случае вернуть false.

Ответы [ 5 ]

42 голосов
/ 04 ноября 2010

Нет логического типа в 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';
9 голосов
/ 04 ноября 2010

В 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;
8 голосов
/ 04 ноября 2010

СУБД Oracle не имеет логического типа данных, вы можете использовать только логические переменные в 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 голосов
/ 08 мая 2013

Или вы можете сделать это:

select decode(max(USER_ID), null, 'FALSE', 'TRUE') BOOL_VAL
from USER_TABLE where USER_ID = [some USER_ID here]
3 голосов
/ 29 октября 2012

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

...