2016-07-12 14 views
0

Wenn ich eine leere Zeichenfolge in eine Datenbanktabellenspalte einfügen, scheint es intern als NULL gespeichert. Warum kann ich die entsprechende Zeile nicht auswählen, indem ich genau nach dieser leeren Zeichenfolge suche?leere Zeichenfolge in Oracle

Beispiel:

insert into mytable (mycolumn,col2,col3) values ('','xyz','abc'); 

// now there is a row having mycolumn == NULL 

select * from mytable where mycolumn=''; 

// empty :(

Was kann ich dagegen tun?

+0

Verwandte http://stackoverflow.com/questions/203493/why-does-oracle-9i-treat-an-empty-string-as-null/203536#203536 –

Antwort

3

Dies ist ein seltsamer Anachronismus in Oracle (mit Standardeinstellungen). Oracle behandelt tatsächlich eine leere Zeichenfolge als NULL. Dazu gehören Vergleiche, so:

where mycolumn = '' 

ist die gleiche wie:

where mycolumn = NULL 

Und dies nie wieder wahr (NULL <> NULL).

Mein Rat? Gewöhnen NULL ausdrücklich zu verwenden und zu schreiben:

where mycolumn is null 
+0

upvoted für Anachronismus: P – SriniV

+0

dieses saugt wirklich – Ferenjito

+0

Interessiert an Ihrer Randnotiz zum Thema "Standardeinstellungen verwenden". Mir war nicht bewusst, dass es eine Einstellung gibt, in der Sie Oracle bitten können, leere Strings als von NULL verschieden zu behandeln. Kannst du bitte etwas ausarbeiten? Vielen Dank! – mathguy

2

Da Oracle seltsam ist, dass Art und Weise. Es behandelt NULL und leere Zeichenfolge als identisch. Und deshalb hat alles mit = '' oder! = '' Einen logischen Wert von UNBEKANNT, niemals WAHR. Um auf Gleichheit oder Ungleichheit mit der leeren Zeichenkette zu prüfen, müssen Sie nach meiner Spalte IS NULL oder IS NOT NULL suchen. (Dieser Teil über die Suche nach NULL ist jedoch nicht Oracle - es ist der SQL-Standard.) In jedem Fall ist in Oracle die Gleichheitsbedingung = = anstatt ==.

1

Read here

Ein leerer String wird als Nullwert in Oracle behandelt. Es ist auch wichtig zu beachten, dass der Nullwert insofern einzigartig ist, als Sie die üblichen Operanden (=, <,>, usw.) für einen Nullwert nicht verwenden können. Stattdessen müssen Sie die Bedingungen IS NULL und IS NOT NULL verwenden.

0

NULL-Werte repräsentieren fehlende oder unbekannte Daten. NULL-Werte werden als Platzhalter oder als Standardeintrag in Spalten verwendet, um anzuzeigen, dass keine tatsächlichen Daten vorhanden sind. Der NULL-Wert ist in SQL nicht typisiert. Dies bedeutet, dass es sich nicht um eine Ganzzahl, ein Zeichen oder einen anderen spezifischen Datentyp handelt.

Beachten Sie, dass NULL nicht mit einem leeren Datenstring oder dem numerischen Wert '0' identisch ist. Während NULL das Fehlen eines Werts angibt, repräsentieren die leere Zeichenfolge und das numerische Null beide tatsächliche Werte.

Während ein NULL-Wert zugewiesen werden kann, kann sie nicht mit irgendetwas gleichgesetzt werden, einschließlich itself.It ist auch wichtig zu beachten, dass der Nullwert ist einzigartig

Da NULL auf einen Datentyp darstellen oder nicht zu , Sie können nicht mit beliebigen Vergleichsoperatoren auf NULL-Werte testen, z. B. =, < oder <>.

Dies kann Ihnen helfen, klar über NULL in Oracle zu verstehen.

Verwandte Themen