2010-11-04 7 views
17

Wie überprüfe ich, ob ein bestimmtes Element in einer Tabelle existiert - wie kann ich wahr oder falsch zurückgeben?Oracle Sql gibt True zurück, wenn vorhanden Frage

Ich habe eine Tabelle, die

  • User_id
  • user_password
  • user_secretQ

Verbal hat, möchte ich dies tun: Wenn eine bestimmte user_id in der user_id Spalte vorhanden ist, dann true zurückgeben - andernfalls false zurückgeben.

+0

Wunsch Ausgang STRING „JA“ oder „NEIN“ Und user_id ist Numberic – Matt

+0

Wenn Sie eine Zeichenfolge zurückgeben möchten, dann bearbeiten Sie Ihre Frage nach dazu. Eine Zeichenfolge, die "JA" oder "NEIN" sagt, ist nicht dasselbe wie eine Rückgabe von wahr oder falsch, was ein boolescher Wert wäre. – Pere

Antwort

38

In Oracle SQL gibt es keinen booleschen Typ. Sie werden dementsprechend eine 1 oder 0, oder so und handeln zurückkehren müssen:

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

Gibt es einen Fehler? Funktioniert Ihre SELECT-Anweisung in normalem SQL * Plus? – DCookie

+0

Oder 'SELECT NVL2 (MAX (Benutzer_ID), 'YES', 'NO') ...' – Rubio

8

In PL/SQL können Sie dies tun:

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; 

Dies würde dann in Aufruf PL/SQL verwendet werden dies wie:

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

HINWEIS: ich habe count (*) in der Abfrage in dem Wissen, dass dies nur 1 oder 0 im Fall eines Primärschlüsselsuche zurück. Wenn es mehr als eine Zeile sein könnte, dann würde ich hinzufügen „und rownum = 1“, um die Abfrage unnötig zu verhindern viele Datensätze zu zählen, um herauszufinden, wenn überhaupt vorhanden ist:

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 nicht boolean-Datentyp hat , Sie können boolesche Variablen nur in PL/SQL verwenden.

Wenn Sie einfach Strings 'TRUE' und 'FALSE' zurückkehren wollen Sie können dies tun ..

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

ich aber @ DCookie Abfrage mögen.

2

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

3

Oder Sie könnten dies tun:

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

Ein 'String' mit" FALSE "oder" TRUE "als Inhalt ist kein' Boole'-Wert. – Pere

Verwandte Themen