我正在尝试将CLOB列添加到表中(实际上将VARCHAR更改为CLOB,但似乎只能通过添加新列,复制和删除旧列).如果没有默认值,该列应为NOT NULL(并且表不为空).我怎样才能做到这一点?
我最初的想法是使用虚拟默认值创建列,稍后进行更改,但这似乎不可能:
ALTER TABLE foo RENAME COLUMN text TO text_temp;
ALTER TABLE foo ADD (
text CLOB DEFAULT '*' NOT NULL
);
UPDATE foo SET text = text_temp;
ALTER TABLE foo DROP COLUMN text_temp;
ALTER TABLE foo MODIFY (
text CLOB NOT NULL
);
-- ORA-22296: invalid ALTER TABLE option for conversion of LONG datatype to LOB
Run Code Online (Sandbox Code Playgroud)
我也尝试将列定义为text CLOB并稍后添加NOT NULL约束,但它给出了相同的错误.有没有办法做到这一点,没有重新创建整个表?
Luk*_*ard 10
是否
ALTER TABLE foo MODIFY text DEFAULT NULL;
Run Code Online (Sandbox Code Playgroud)
为你工作?
添加或删除默认值或NOT NULL约束时,无需指定列的数据类型.
编辑:引用Oracle文档ALTER TABLE:
如果列具有默认值,则可以使用DEFAULT子句将默认值更改为NULL,但不能完全删除默认值.如果列已分配了默认值,则USER_TAB_COLUMNS数据字典视图的DATA_DEFAULT列将始终显示默认值或NULL.
这可以解释为什么你在SQL Developer中看到了差异.
但是,我不认为指定DEFAULT NULL列和指定默认值之间存在显着差异.在这两种情况下,对于未明确赋予INSERT语句值的任何列,将假定为null值.
| 归档时间: |
|
| 查看次数: |
6313 次 |
| 最近记录: |