Ich versuche zu verstehen, wie Oracle NULL-Werte behandelt. Dies ist eher eine Bitte um Bestätigung dessen, was ich bereits entdeckt habe, um sicherzugehen, dass ich etwas Offensichtliches nicht übersehen habe. Im Folgenden finden Sie Skripts, die bestätigen, dass Oracle NULL-Werte genauso behandelt wie eine leere Zeichenfolge. Wenn dies der Fall ist, dann sagen Sie, warum eine Oracle - Datenbank so entwickelt werden sollte, dass ein Feld NULL ist, außer dass eine Verschleierung in einen Index eingeführt wird, wenn dagegen abgefragt wird (dh ... WHERE NVL (Feldname, 'Standardwert ')! =' test ') ???Welchen Vorteil haben NULL-Werte in Oracle?
-- Returns only 2 rows
-- Oracle doesn't differentiate from blank strings and NULL values
SELECT NULL AS Test_Nulls from dual
UNION
SELECT '' AS Test_Nulls from dual
UNION
SELECT 'Test' AS Test_Nulls from dual;
-- Returns "X"
-- Further proof Oracle doesn't differentiate from blank strings and NULL values
SELECT 'X' AS Test_Nulls
FROM dual
WHERE '' is NULL;
-- Returns "X"
-- Even further proof Oracle doesn't differentiate from blank strings and NULL values
SELECT NVL('','X') AS Test_Nulls
FROM dual;
-- Returns 3 rows
-- Oracle recognizes <Carriage Return> + <Line Feed>
SELECT '' AS Returned from dual
UNION
SELECT '
' AS Returned FROM dual
UNION
SELECT 'Test' AS Returned FROM dual;
Null ist in der Tat (fast) die gleiche wie leere Zeichenfolge, aber nur für String-Datentypen. Eine Zahl oder ein Datum kann auch null sein, und in diesem Fall ist null keine leere Zeichenfolge (es hat nicht einmal den gleichen Datentyp). Es gibt eine Menge Leute, mich eingeschlossen, die sehr unzufrieden mit Oracles Interpretation von Null für Strings sind, die die gleichen wie eine leere Zeichenfolge sind - dies verstößt gegen alle Prinzipien der Relationstheorie und des SQL-Standards. Oracle sagt immer wieder, dass sie "dem SQL-Standard mit dem Datentyp VARCHAR folgen" mögen, aber ich halte nicht den Atem an. Bestätigt! – mathguy
Einverstanden, Oracles Unterstützung für NULL ist schlecht, aber in einer sehr alten Geschichte begründet und wird sich kaum ändern. Du gewöhnst dich nur daran. NULL-fähige Spalten werden im Allgemeinen für optionale Felder verwendet und/oder um das Speichern von Zeilen mit unvollständigen (unbekannten oder noch zu bestimmenden) Daten zu ermöglichen. –
Alle neuen Designs für VarChar2- und nVarChar2-Felder in Oracle werden als NOT NULL mit einem Standardwert von '' ausgeführt. –