下面是測試表,有兩個NOT NULL列,和一個空列:
create table zzz_mark_test_me (
cust_id varchar2(20) not null,
cust_name varchar2(20) null,
cust_phone varchar2(20) not null
);
table ZZZ_MARK_TEST_ME created.
desc zzz_mark_test_me
Name Null Type
---------- -------- ------------
CUST_ID NOT NULL VARCHAR2(20)
CUST_NAME VARCHAR2(20)
CUST_PHONE NOT NULL VARCHAR2(20)
現在調用這個SQL:
select 'alter table ' || table_name ||
' modify (' || column_name || ' null);'
from user_tab_columns
where table_name='ZZZ_MARK_TEST_ME' and nullable='N'
order by column_id;
其中產量如下:
alter table ZZZ_MARK_TEST_ME modify (CUST_ID null);
alter table ZZZ_MARK_TEST_ME modify (CUST_PHONE null);
複製/粘貼輸出到SQL * Plus等,並調用:
alter table ZZZ_MARK_TEST_ME modify (CUST_ID null);
table ZZZ_MARK_TEST_ME altered.
alter table ZZZ_MARK_TEST_ME modify (CUST_PHONE null);
table ZZZ_MARK_TEST_ME altered.
而現在,沒有更多的NOT NULL:
desc zzz_mark_test_me
Name Null Type
---------- ---- ------------
CUST_ID VARCHAR2(20)
CUST_NAME VARCHAR2(20)
CUST_PHONE VARCHAR2(20)
不知道爲什麼你會得到該消息,除非您試圖將列更改爲已爲NULLable的NULLable。我只是做了一個4列表的測試,所有列NOT NULL,並且將所有4列的變化都改爲NULL - 工作正常。你能發佈一個小樣本,重新創建你的問題嗎?將它保存到4列,4行的表格(這將足夠大,我們可以看到問題)。包括創建表,插入,更改腳本。 – Ditto 2015-02-06 21:07:36