我有一个名为CUSTOMER
的表,列数很少。其中一个是Customer_ID
。
最初Customer_ID
列WILL NOT
接受NULL
值。
我已从代码级别进行了一些更改,因此Customer_ID
列默认会接受NULL
值。
现在我的要求是,我需要再次使此列接受NULL
值。
为此,我添加了执行以下查询:
ALTER TABLE Customer MODIFY Customer_ID nvarchar2(20) NULL
我收到以下错误:
ORA-01451 error, the column already allows null entries so
therefore cannot be modified
这是因为我已将Customer_ID
列设为接受NULL
值。
在执行上述查询之前,有没有办法检查列是否接受NULL
值???
答案 0 :(得分:10)
您可以在USER_TAB_COLUMNS中使用NULLABLE列。这将告诉您列是否允许使用二进制Y / N标志的空值。
如果您想将其放在脚本中,您可以执行以下操作:
declare
l_null user_tab_columns.nullable%type;
begin
select nullable into l_null
from user_tab_columns
where table_name = 'CUSTOMER'
and column_name = 'CUSTOMER_ID';
if l_null = 'N' then
execute immediate 'ALTER TABLE Customer
MODIFY (Customer_ID nvarchar2(20) NULL)';
end if;
end;
最好不使用动态SQL来改变表格。手动完成并确保先检查一切。
答案 1 :(得分:4)
或者你可以忽略错误:
declare
already_null exception;
pragma exception_init (already_null , -01451);
begin
execute immediate 'alter table <TABLE> modify(<COLUMN> null)';
exception when already_null then null;
end;
/
答案 2 :(得分:1)
我做了这样的事情,它工作得很好。
尝试执行查询,如果发生任何错误,请捕获SQLException
。
try {
stmt.execute("ALTER TABLE Customer MODIFY Customer_ID nvarchar2(20) NULL");
} catch (SQLException sqe) {
Logger("Column to be modified to NULL is already NULL : " + sqe);
}
这是正确的做法吗?
答案 3 :(得分:1)
当您之前为 DEFAULT ON NULL
列提供了 NOT NULL
值时,您可能会遇到此错误。
如果是这种情况,要使列可以为空,您还必须在修改其可为空性约束时将其默认值重置为 NULL
。
例如:
DEFINE table_name = your_table_name_here
DEFINE column_name = your_column_name_here;
ALTER TABLE &table_name
MODIFY (
&column_name
DEFAULT NULL
NULL
);
答案 4 :(得分:0)
修改现有表格的约束
例如...将not null
约束添加到列。
然后按照给定的步骤进行操作:
1)选择要修改更改的表。
2)点击Actions..
---&gt;选择列----&gt;添加。
3)现在给出列名,数据类型,大小等,然后单击“确定”。
4)您将看到该列已添加到表中。
5)现在点击位于Edit
按钮左侧的Actions
按钮。
6)然后你会得到各种表修改选项。
7)从列表中选择column
。
8)选择要在其中提供not null
的特定列。
9)从Cannot be null
选择column properties
。
10)就是这样。