Oracle sql возвращает true, если существует вопрос
Как проверить, существует ли какой-либо конкретный элемент в таблице - как я могу вернуть true или false?
У меня есть таблица с
- user_id
- user_password
- user_secretQ
Верно, я хочу сделать это: если в столбце user_id
существует конкретный user_id
, тогда верните true - в противном случае верните false.
Ответы
Ответ 1
В 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';
Ответ 2
В 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 в случае поиска первичного ключа. Если может быть больше одной строки, я бы добавил "и 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;
Ответ 3
Oracle RDBMS не имеет логических типов данных, вы можете использовать только логические переменные в PL/SQL.
Если вы просто хотите вернуть строки "ИСТИНА" и "ЛОЖЬ",
вы можете это сделать.
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 запрос, хотя.
Ответ 4
Или вы можете это сделать:
select decode(max(USER_ID), null, 'FALSE', 'TRUE') BOOL_VAL
from USER_TABLE where USER_ID = [some USER_ID here]
Ответ 5
select count(*) from table where userid = :userid and rownum <= 1); -- If exists then 1 else 0