Beim Einfügen wird eine leere Zeichenfolge in null konvertiert:
insert into test (f) values ('');
Jetzt gibt es eine Zeile mit f, die eine Null enthält.
Wenn ich die Tabelle abfrage, kann ich jedoch nicht '' verwenden:
select * from test where f='';
no rows selected
Ich kann null verwenden:
select * from test where f is null;
____F_
NULL
Es scheint also, dass Oracle entschieden hat, dass leere Zeichenfolgen nicht zum Einfügen verwendet werden können, aber bei Abfragen leere Zeichenfolgen bleiben. Wo ist die Dokumentation darüber, wann eine leere Zeichenfolge zu einer Null wird und wann sie eine leere Zeichenfolge bleibt?
oracle
null
empty-string
Kainaw
quelle
quelle
Antworten:
Das sagt alles:
SQL Fiddle
2 Dinge:
1)
''
wirdNULL
beim Einfügen in konvertiert . Das ist eine Oracle-VARCHAR2
Sache.2)
select * from test where f='';
versucht zu tunselect * from test where f=NULL
, was nicht definiert ist, und gibt nichts zurück, weilNULL
der Gleichheitsoperator nicht gefällt. Sie müssenIS NULL
oder verwendenIS NOT NULL
.Ich werde hinzufügen, dass sich der
CHAR
Datentyp anders verhält, weil er aufgefüllt ist.quelle
Oracle behandelt '' und NULL gleich. Beim Einfügen von '' erfolgt keine Konvertierung von '' in NULL, sondern lediglich eine Interpretation von '', so wie
NULL
das Wort NULL als interpretiert wirdNULL
oder rtrim ('a', 'a') als interpretiert wirdNULL
.Hier ist eine Demonstration anhand der folgenden Tabelle und Einfügung:
Die obige Einfügung fügte einen NULL-Wert für c1 ein. Sie können diese Zeile wie folgt auswählen:
Wenn Sie eine WHERE-Klausel hinzufügen, um die Gleichheit zu vergleichen, und einer der verglichenen Werte NULL ist, ist das Ergebnis immer unbekannt. Unbekannt wird als falsch ausgewertet, außer dass weitere Operationen mit einem unbekannten Wert unbekannte Werte erzeugen. Alle folgenden geben keine Zeilen zurück, da die WHERE-Klauseln Bedingungen enthalten, die unabhängig von den Daten niemals wahr sind.
Oracle bietet eine spezielle Syntax zum Abrufen von Zeilen mit einer bestimmten Spalte mit Nullwerten -
IS NULL
.Es gibt einige Bedingungen, unter denen Oracle NULL vergleicht und sie als gleichwertig mit anderen NULL-Werten behandelt, z. B. in DECODE-Anweisungen und in zusammengesetzten Schlüsseln.
Weitere Informationen finden Sie in der SQL-Sprachreferenz .
quelle
Oracle RDBMS macht keine Unterschiede zwischen null und leeren Zeichenfolgen. Dies bedeutet, dass es keine Transformation gibt, um eine leere Zeichenfolge in einen Nullwert umzuwandeln.
Ich kann verstehen, dass keine der 2 Informationen enthält.
quelle
WHERE f= ''
aus dem gleichen Grund, aus dem Sie keine Ergebnisse erhaltenWHERE f=NULL
. In Oracle''
undNULL
sind gleich, so dass beide als falsch ausgewertet werden.f not null
Einschränkungen erstellen, schlägt das Einfügen mit dem Fehler "NULL kann nicht eingefügt werden" fehl.Das erklärt es ein wenig:
quelle