我想了解Oracle是如何处理空值的。这实际上更多的是要求确认我已经发现的东西,以确保我没有忽略一些显而易见的东西。以下是用于确认Oracle处理空值与处理空字符串的方式相同的脚本。如果是这样的话,请告诉我为什么要开发任何Oracle数据库来允许字段为空,而不是在对索引进行查询时引入模糊处理(即...WHERE NVL(FieldName,‘默认值’) !=‘测试’)?
-- 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;发布于 2016-05-19 21:27:37
答案很简单:对于我在Oracle中所做的任何新的数据库设计工作,我都会将我的所有varchar2和nvarchar2以及char2和nchar2字段设置为不允许NULL,并具有空字符串的默认值。我一直怀疑添加"2“后缀的命名约定,以及它不是其他数据库平台的常见字段类型的事实。对我来说,这似乎是一种最后时刻的绝望,意味着Oracle在早期处理了一种情况,比如,“哦,好吧,……我们不能纠正它,所以我们就给它起一个新的名字!”这就是我对这件事的看法。
https://stackoverflow.com/questions/37169815
复制相似问题