SQLで作業しているのですが、テーブルの作成で問題に直面しています! 以下は私のコードです。
CREATE TABLE Voucher_Types
(
ID Number(3, 0),
Abbreviation VarChar(2),
Voucher_Type VarChar(100),
EntryBy VarChar(25),
EntryDate Date,
CONSTRAINT ID_PK Primary Key(ID)
);
というエラーが出ています。 ORA-02264: name already used by an existing constraint<br />.私はOracle10gを使用しています。 Oracle10g<br />.を使用しています。 このような場合、どのようにすればよいのでしょうか?って感じです。
ID_PK`という名前ですでに制約されている別のテーブルがあります。
それがどのテーブルなのか知りたい場合は、次のようにしてください。
select owner, table_name from dba_constraints where constraint_name = 'ID_PK';
おそらく、create table
ステートメントをコピーしましたが、主キー'制約の名前を変更していません。
一般的に、制約の名前にテーブル名を含めることは良い習慣であると考えられています。その理由の1つは、まさにこのようなエラーを防ぐためです。
ですから、あなたのケースでは、次のように使用します。
CREATE TABLE Voucher_Types
(
...
CONSTRAINT Voucher_Types_PK Primary Key(ID)
);
更新 同じ制約名を2回使用することはできないのでしょうか?(コメントでのご質問の通りです)。これはまさに、制約を識別するための名前であるためです。実行中のシステムで制約の違反があった場合、それがどの制約であったかを知りたいので、名前が必要です。しかし、この名前が複数の制約を参照できるのであれば、名前は特に意味がない。
エラーメッセージは、スキーマにID_PKという名前の別の制約がすでに存在することを伝えています。
CREATE TABLE Voucher_Types
(
ID Number(3, 0),
Abbreviation VarChar(2),
Voucher_Type VarChar(100),
EntryBy VarChar(25),
EntryDate Date,
CONSTRAINT VOUCHER_TYPES_ID_PK Primary Key(ID)
);
問題の制約を見つけるには
SELECT * FROM user_constraints WHERE CONSTRAINT_NAME = 'ID_PK'
これは、ID_PKという制約があることを意味します。 CONSTRAINT Voucher_Types_ID_PK Primary Key(ID)` 例えば、以下のようにします。
で存在するかどうか確認できます。
select * from user_constraints where upper(constraint_name) = 'ID_PK';
または
select * from all_constraints where upper(constraint_name) = 'ID_PK';