更改 clob 列的约束

问题描述 投票:0回答:2

我想将 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 的场景,但在这里我只想更改约束。为什么这是不可能的?

提前致谢!

sql oracle constraints clob
2个回答
2
投票

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;

您将能够删除无效约束,同时保持相同的数据类型。


0
投票

试试这个:

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;
© www.soinside.com 2019 - 2024. All rights reserved.