2016-05-11 7 views
0

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; 
+5

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

+1

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. –

+0

Alle neuen Designs für VarChar2- und nVarChar2-Felder in Oracle werden als NOT NULL mit einem Standardwert von '' ausgeführt. –

Antwort

0

Einfache Antwort: Für jede neue Datenbank-Design-Arbeit, die ich in Oracle tun, werde ich alle meine varchar2 und nvarchar2 und char2 und nchar2 Felder setzt nicht NULL zu ermöglichen und einen Standardwert von einer leeren Zeichenfolge haben. Ich war immer misstrauisch gegenüber der Namenskonvention des Hinzufügens eines "2" -Suffixes und der Tatsache, dass es kein üblicher Feldtyp zu anderen Datenbankplattformen ist. Für mich scheint es, als ob ein letzter Moment verzweifelt bedeutet, dass Oracle in ihren frühen Tagen eine Situation gehandhabt hat wie: "Oh, naja ... wir können es nicht richtig machen, also geben wir ihm einfach einen neuen Namen!" Das sind meine 2 Cent in dieser Angelegenheit.

Verwandte Themen