3
create table autos (
id integer generated by default on null as IDENTITY unique,
owner_name nvarchar2(50)
);

次に、テーブルにいくつかの行を挿入します

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;

いくつかのクエリが正常に実行されましたが、この後、オラクルはエラーを返します:ORA-30667: cannot drop NOT NULL constraint on a DEFAULT ON NULL column

ここで何が問題なのか教えてください。

PS私はSQL Developerを使用しています。

アップデート

データベース接続で上記のすべてのコードを試している場合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 で挿入しようとすると、同様のエラーが発生します。

4

1 に答える 1

0

問題は、列定義で IDENTITY を使用する場合、その制限を考慮する必要があることです。

行をサブクエリとして挿入する場合、次の制限が発生します。 CREATE TABLE AS SELECT は、列 (​​ source ) の ID プロパティを継承しません。挿入でも同じ状況が発生します.IDENTITY一意は正しく機能しません。

  insert into autos
(owner_name)
select owner_name
from autos;
于 2015-03-13T08:29:30.570 に答える