1

在我们当前的数据库(从 sql 数据库迁移)中,我们有一个表 x,其中的列 y(varchar2 (4000)) 不可为空。表和列都填充了数据,我应该将 y 列中的数据更新为“零长度字符串”。我不能,尽管互联网告诉我应该使用这个值'\u00A0'。它似乎不起作用。有什么建议么?

ps:我无法将列更改为可为空...所以这不是一个选项

4

1 回答 1

0

我同意贾斯汀的观点,这个要求没有意义。但是有一个技巧可以做到这一点,尽管这通常是个坏主意。然而,我必须强调,我(几乎)永远不会在真实系统中这样做。

ALTER TABLE x MODIFY y NULL;

UPDATE x SET y = '' WHERE ...;

ALTER TABLE x MODIFY y NOT NULL NOVALIDATE;

这会暂时删除约束,更新需要设置为 NULL 的行,然后重新应用约束,但使用 NOVALIDATE 选项。

然而,我再说一遍,这不是一个好主意,因为这可能会对查询产生不利影响——优化器将不再能够假设该列中的值不为空,所以如果(例如)你有一个索引列,一些查询将不再使用索引。

此外,您在执行此操作时不能允许其他事务运行,因为不会检查约束。

于 2013-10-10T05:27:50.880 回答