2014-04-18 162 views
3
create table autos (
id integer generated by default on null as IDENTITY unique, 
owner_name nvarchar2(50) 
); 

然後我在表中插入多個行ORACLE 12 C,不能在DEFAULT下降NOT NULL約束ON NULL柱

insert into autos 
(owner_name) 
VALUES 
('Nick'); 

insert into autos 
(owner_name) 
VALUES 
('Tommy'); 

2行插入,則增加的行數,我運行此查詢

insert into autos 
(owner_name) 
select owner_name 
from autos; 

幾個查詢成功運行,但在此之後,Oracle返回錯誤:ORA-30667: cannot drop NOT NULL constraint on a DEFAULT ON NULL column

請說,這裏有什麼問題?

P.S.我使用SQL Developer。

UPDATE

如果我想所有上面的代碼中sys數據庫連接,一切工作正常,但我創建新用戶(在這裏是代碼,我如何創建新的用戶)

CREATE USER C##OTO_USER 
IDENTIFIED BY oto_user_pass; 

GRANT ALL PRIVILEGES TO C##OTO_USER; 

然後我創建與C##OTO_USER的新連接,並且僅在此連接發生上述錯誤。

此外,該錯誤有時會發生,有時INSERT查詢工作正常。

不但INSERT... SELECT,但通常INSERT聲明也導致了錯誤。

所以,我認爲這是新的用戶/連接問題,可能是上面的用戶創建的代碼,而不是創建完整的用戶?

如果使用SQL插入嘗試* PLUS,也發生同樣的錯誤。

+2

錯誤消息不匹配您的SQL語句 –

+0

@a_horse_with_no_name,我也想知道,但是當我試圖運行'INSERT ... SELECT'查詢,返回的正是這種錯誤消息。 – RIKI

+0

這適用於我在Oracle 12c和SQL Developer 3.2.20.09上的正常工作。如果您在SQL * Plus中運行此代碼會發生什麼? SQL * Plus更穩定可預測,運行它會告訴我們這是數據庫問題還是IDE問題。 –

回答

0

你的問題是,當你在列定義中使用的身份,你應該考慮到它的限制。

如果要插入行作爲子查詢,以便遇到以下限制:CREATE TABLE AS SELECT將不會繼承列(source)上的標識屬性。插入時發生同樣的情況,IDENTITY unique does not work properly。

insert into autos 
(owner_name) 
select owner_name 
from autos;