2010-11-04 10 views
17

Tabloda belirli bir öğenin olup olmadığını nasıl kontrol ederim - nasıl doğru veya yanlış döndürebilirim?Oracle sql true varsa getiri

ben olan bir tablo var

  • user_id
  • user_password
  • user_secretQ

Sözlü, ben bunu yapmak istiyorum: Belirli user_iduser_id sütununda varsa, o zaman Doğru geri dönüş - aksi takdirde yanlış döndürür.

+0

sonra, bir dize döndürür göre sorunuzu düzenlemek istiyorsanız İstenilen çıkış STRING "EVET" veya "HAYIR" Ve user_id – Matt

+0

numberic olduğunu Buna. "EVET" veya "HAYIR" yazan bir dize, bir boole olan bir doğru veya yanlış döndürmeyle aynı değildir. – Pere

cevap

38

Oracle SQL'de Boole tipi yok.

SELECT CASE WHEN MAX(user_id) IS NULL THEN 'NO' ELSE 'YES' END User_exists 
    FROM user_id_table 
WHERE user_id = 'some_user'; 
+0

Hata mı atıyor? Select deyiminiz düz eski SQL * Plus'ta çalışıyor mu? – DCookie

+0

Veya 'SELECT NVL2 (MAX (kullanıcı_Kimliği), 'YES', 'NO') ...' – Rubio

8

PL/SQL bunu yapabilirsiniz:

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; 

Sonra bu PL/SQL çağırarak kullanılacak olurdu bir 1 veya 0 veya bazı tür dönmek ve ona göre hareket etmek gerekir

if user_exists('john') then 
    dbms_output.put_Line('John exists'); 
end if; 

NOT: Bu gibi bu sadece bir birincil anahtar arama durumunda 1 veya 0 dönecektir bilerek sorguda sayımı (*) kullanılır. Birden fazla satır olabilir Eğer herhangi varsa o zaman sadece öğrenmek için gereksiz yere çok sayıda kayıt sayma önlemek için sorguya "ve rownum = 1" eklersiniz:

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; 
7

Oracle RDBMS boolean veri türü yok , yalnızca boole değişkenlerini PL/SQL'de kullanabilirsiniz.

sadece dizeleri 'DOĞRU' ve 'YANLIŞ' dönmek istiyorsanız

bunu yapabilirsiniz .. Gerçi DCookie sorgusunda @ gibi

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') 

.

2

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

3

Yoksa yapabilirsiniz:

select decode(max(USER_ID), null, 'FALSE', 'TRUE') BOOL_VAL 
from USER_TABLE where USER_ID = [some USER_ID here] 
+0

İçerik "Boolean" değeri olmadığından "FALSE" veya "TRUE" ile bir "String". – Pere