我想将 clob 列的
NOT NULL
约束更改为 NULL
约束。然而,当尝试
ALTER TABLE myTable ALTER COLUMN myClobCol clob NULL;
或
ALTER TABLE myTable modify myClobCol clob NULL;
我收到以下错误:
ORA-01735: invalid ALTER TABLE option
或
ORA-22859: invalid modification of columns
我做错了什么?在这种情况下我也必须使用临时列吗?我知道通过使用临时列将数据类型从 clob 更改为 varchar2 的场景,但在这里我只想更改约束。为什么这是不可能的?
提前致谢!
Oracle 在尝试修改
ORA-22859
、CLOB
或 NCLOB
列数据类型时会引发 BLOB
错误。这是由于所谓的 LOB
数据类型的列限制。
在
ALTER TABLE
命令中指定新类型时,如您的情况:
ALTER TABLE table MODIFY column CLOB NULL;
验证被触发,查询被中止,因为 Oracle 认为从
CLOB
更改为 CLOB
同样无效。
好处是
ALTER TABLE
命令支持省略您想要保留完整的列定义部分。因此,将其更改为:
ALTER TABLE table MODIFY column NULL;
您将能够删除无效约束,同时保持相同的数据类型。
试试这个:
declare
col_nullable varchar2(1);
begin
select nullable into col_nullable
from user_tab_columns
where table_name = 'myTable'
and column_name = 'myClobCol';
if col_nullable = 'N' then
execute immediate 'alter table mytable modify (myClobCol null)';
end if;
end;