2010-11-04 136 views
17

¿Cómo puedo verificar si un elemento en particular existe en una tabla? ¿Cómo puedo devolver verdadero o falso?Oracle sql return true if exists question

Tengo una tabla que tiene

  • user_id
  • user_password
  • user_secretQ

verbalmente, yo quiero hacer esto: Si un particular, user_id existe en la columna de la user_id, a continuación, devolver verdadero; de lo contrario, devolver falso.

+0

cadena de salida deseado "SÍ" o "NO" Y user_id es Numberic – Matt

+0

Si desea devolver una cadena, a continuación, editar su pregunta de acuerdo a ese. Una cadena que dice "SÍ" o "NO" no es lo mismo que devolver verdadero o falso, que sería un booleano. – Pere

Respuesta

38

No hay ningún tipo booleano en Oracle SQL. Tendrá que devolver un 1 o 0, o algo así y actuar en consecuencia:

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

¿Está arrojando un error? ¿Funciona su declaración seleccionada en el antiguo SQL * Plus? – DCookie

+0

O 'SELECCIONE NVL2 (MAX (ID_usuario), 'SÍ', 'NO') ...' – Rubio

8

En PL/SQL se puede hacer esto:

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; 

Esto entonces se usa en la llamada PL/SQL de esta manera:

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

NOTA: he utilizado la cuenta (*) en la consulta con la certeza de que esto sólo devolverá 1 o 0 en el caso de una búsqueda de la clave principal. Si no puede haber más de una fila a continuación, me gustaría añadir "y rownum = 1" a la consulta para evitar innecesariamente contando muchos registros sólo para averiguar si es que existe:

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 no tiene tipo de datos booleano , solo puedes usar variables booleanas en PL/SQL.

Si simplemente desea devolver cadenas 'verdadero' y 'falso' usted puede hacer esto ..

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

me gusta @ consulta de DCookie sin embargo.

2

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

3

O usted podría hacer esto:

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

Una 'Cadena' con "FALSO" o "VERDADERO" ya que el contenido no es un valor 'Booleano'. – Pere