一般的添加非空列的步骤是:先add可以为空的列,然后update该列为一个值(比如0),最后modify该列的类型
但是遇到类型为clob的就不行了。在modify这步时报错:ORA-22296:invalid ALTER TABLE option for conversion of Long datatype to LOB,于是去找了下22296错误的详细信息:(http://docs.oracle.com/cd/E11882_01/server.112/e17766/e19999.htm#ORA-24230)
Cause: An attempt was made to specify ALTER TABLE options which are disallowed during conversion of LONG datatype to LOB. The only ALTER TABLE options allowed during conversion of LONG datatype to LOB are the default clause and LOB storage clause for the column being converted to LOB.
Action: Remove the disallowed options.
解决办法:
在update这步执行:update tableName set colName = empty_clob();
在modify这步执行:alter table tableName modify (colName not null);//不是colName clob not null,这和一般的modify是不同的!!!
示例:
alter table post_info add ( POST_CONTENT CLOB);
update post_info set post_content = empty_clob();
alter table post_info modify (POST_CONTENT not null);
COMMENT ON COLUMN "DBVOP"."POST_INFO"."POST_CONTENT" IS
'通告内容';
commit;
---------------另外:如何将not null 的clob类型的类变为null的列
语法:alter table tableName modify colName null ;
注:EMPTY_BLOB()和EMPTY_CLOB()函数是用来对大数据类型字段进行初始化操作的。
--转自