database - Oracle 中的修改列 - 如何在设置为可为空之前检查列是否可为空?

标签 database oracle plsql schema

我正试图代替一位同事从事一些 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/

相关文章:

mysql - MySQL 中 'SET' 两个表之间的多列更新

database - 如何从 Grails Controller 操作中在当前系统中创建文件并保存从数据库中获取的数据?

sql - 如何修复 SQL Developer Data Modeller 中的 "ERROR: FK name length exceeds maximum allowed length(30)"

sql - PL SQL 中的游标

java - 为什么我必须重新定义数据结构两次?我是不是该?

c# - 可以在 C# 构造函数中调用数据库初始化吗?

.net - Web.config 中的 ODP.NET 配置

sql - 在索引编号列上使用 'like'的Oracle查询,性能较差

arrays - ORA-01422 : exact fetch returns more than requested number of rows in combination with a json object

oracle - Commit In循环给出错误的输出?