我正试图代替一位同事从事一些 Oracle 工作,但遇到了麻烦。在尝试编写脚本将列修改为可为空时,我遇到了可爱的 ORA-01451 错误:
ORA-01451: column to be modified to NULL cannot be modified to NULL
发生这种情况是因为该列已经为 NULL。我们有几个需要更新的数据库,所以在我的错误假设中,我认为将它设置为 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;
关于database - Oracle 中的修改列 - 如何在设置为可为空之前检查列是否可为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1028956/