在我们当前的数据库(从sql数据库迁移)中,我们有一个表x,其中列y(varchar2(4000))不可为空。表和列填充了数据,我应该将列y中的数据更新为“零长度字符串”。我无法,尽管互联网告诉我应该使用这个值'\ u00A0'。它似乎不起作用。有什么建议吗?
ps:我无法将列更改为可空...所以这不是一个选项
答案 0 :(得分:0)
我同意贾斯汀的观点,这个要求没有意义。但有一个技巧可以做到这一点,虽然这通常是一个坏主意。 但我必须强调,我(几乎)永远不会在真实系统中这样做。
ALTER TABLE x MODIFY y NULL;
UPDATE x SET y = '' WHERE ...;
ALTER TABLE x MODIFY y NOT NULL NOVALIDATE;
这会暂时删除约束,更新需要设置为NULL的行,然后使用NOVALIDATE选项重新应用约束。
我再说一遍,这是不是一个好主意,因为这可能会对查询产生不利影响 - 优化器将无法再认为此列中的值不为null,因此,如果(例如)您在列上有索引,则某些查询将不再使用索引。
此外,在执行此操作时,您不能允许其他事务运行,因为不会检查约束。