我试图填补在做一些工作甲骨文一位同事,并遇到了一个障碍。 在试图写一个脚本来修改列空的,我遇到了可爱的ORA-01451错误:
ORA-01451: column to be modified to NULL cannot be modified to NULL
这是发生因为列已经是NULL。 我们需要几个数据库进行udpated,所以在我错误的假定,我想它设置为NULL应该全线合作,以确保每个人都是最新的,不管他们是否已经手动设置此列可空与否。 然而,这显然引起了一些人谁已经有列可为空的错误。
如何一个校验列是否已经为空的,以避免错误? 东西会做到这一点的想法:
IF( MyTable.MyColumn IS NOT NULLABLE)
ALTER TABLE MyTable MODIFY(MyColumn NULL);
你可以在PL / SQL这样做:
declare
l_nullable user_tab_columns.nullable%type;
begin
select nullable into l_nullable
from user_tab_columns
where table_name = 'MYTABLE'
and column_name = 'MYCOLUMN';
if l_nullable = 'N' then
execute immediate 'alter table mytable modify (mycolumn null)';
end if;
end;
只是做了alter table和捕获异常。
DECLARE
allready_null EXCEPTION;
PRAGMA EXCEPTION_INIT(allready_null, -1451);
BEGIN
execute immediate 'ALTER TABLE TAB MODIFY(COL NULL)';
EXCEPTION
WHEN allready_null THEN
null; -- handle the error
END;
/
如果你不希望使用PL / SQL
set feedback off
set echo off
set feedback off
set pages 0
set head off
spool to_null.sql
select 'alter table TAB modify (COL NULL);'
from user_tab_columns
where table_name = 'TAB'
and column_name = 'COL'
and nullable = 'N';
spool off
set feedback on
set echo on
set termout on
@@to_null.sql
host rm -f to_null.sql
或者只是做ALTER TABLE和忽略的错误。
文章来源: MODIFY COLUMN in oracle - How to check if a column is nullable before setting to nullable?