[解決済み] Oracle (ORA-02270) : この列に一致するユニークキーまたはプライマリキーがありません-リストエラー
質問
2つのテーブルがあります。
Table JOB
と
Table USER
以下はその構造です。
CREATE TABLE JOB
(
ID NUMBER NOT NULL ,
USERID NUMBER,
CONSTRAINT B_PK PRIMARY KEY ( ID ) ENABLE
);
CREATE TABLE USER
(
ID NUMBER NOT NULL ,
CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
);
ここで、外部キー制約を
JOB
を参照することで
USER
テーブルのように
Alter Table JOB ADD CONSTRAINT FK_USERID FOREIGN KEY(USERID) REFERENCES USER(ID);
これを投げる
Oracle (ORA-02270) : no matching unique or primary key for this column-list error
のどちらかを指定する必要があるようです。
unique key or primary key
に対する制約
USERID
として持つことはできませんが、1つの
USERID
を複数持つことができます。
JOBS
この問題を解決する方法について、何かご意見やご提案があればお聞かせください。
解決方法を教えてください。
ORA-2270エラーは、単純な論理エラーです。外部キーにリストしたカラムが、親テーブルの主キーまたは一意性制約に一致しない場合に発生します。 一般的な理由は以下の通りです。
- 親にPRIMARY KEY制約またはUNIQUE制約が全くない。
- 外部キー節が親テーブルの間違ったカラムを参照している。
- 親テーブルの制約が複合キーであり、外部キーステートメントですべてのカラムを参照していない。
投稿されたコードでは、どちらも該当しないように見えます。 しかし、あなたのコードでは、それは赤信号です。 は実行されません。 を投稿された通りです。 以前の編集から判断すると、実際のコードではなく、簡略化した例を投稿しているのだと思われます。 残念ながら、単純化する過程で、ORA-2270エラーの原因となっているものを取り除いてしまいましたね。
SQL> CREATE TABLE JOB
(
ID NUMBER NOT NULL ,
USERID NUMBER,
CONSTRAINT B_PK PRIMARY KEY ( ID ) ENABLE
); 2 3 4 5 6
Table created.
SQL> CREATE TABLE USER
(
ID NUMBER NOT NULL ,
CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
); 2 3 4 5
CREATE TABLE USER
*
ERROR at line 1:
ORA-00903: invalid table name
SQL>
この文は失敗しました。USERは予約キーワードなので、テーブルの名前をUSERにすることができないからです。 これを修正しましょう。
SQL> 1
1* CREATE TABLE USER
SQL> a s
1* CREATE TABLE USERs
SQL> l
1 CREATE TABLE USERs
2 (
3 ID NUMBER NOT NULL ,
4 CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
5* )
SQL> r
1 CREATE TABLE USERs
2 (
3 ID NUMBER NOT NULL ,
4 CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
5* )
Table created.
SQL> Alter Table JOB ADD CONSTRAINT FK_USERID FOREIGN KEY(USERID) REFERENCES USERS(ID);
Table altered.
SQL>
そして、なんと!ORA-2270エラーはありません。
残念ですが、これ以上お手伝いできることはあまりありません。 あなたのコードにバグがあるのです。 あなたのコードをここに投稿すれば、私たちの誰かがあなたの間違いを発見してくれるでしょう。 あるいは、自分のコードをチェックして、自分で発見することもできます。
注:以前のバージョンのコードでは、HOB.USERIDをVARCHAR2(20)と定義していました。USER.IDはNUMBERとして定義されているため、外部キーを作成しようとすると、別のエラーが発生するはずです。
ORA-02267: 列の型が参照される列の型と互換性がありません。
ミスマッチを回避する簡単な方法は、外部キー構文を使用して、カラムのデータ型をデフォルトにすることです。
CREATE TABLE USERs
(
ID number NOT NULL ,
CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
);
CREATE TABLE JOB
(
ID NUMBER NOT NULL ,
USERID constraint FK_USERID references users,
CONSTRAINT B_PK PRIMARY KEY ( ID ) ENABLE
);
関連
-
[解決済み] SequelizeでfindOrCreateを使う方法
-
[解決済み] DB2 ログファイルの制限、SQLCODE。-964
-
[解決済み] SGBDとはどういう意味ですか?
-
[解決済み] Hibernateです。ManyToOne生成フィールドraw(255)
-
[解決済み] Python 3 - JDBCで接続する
-
[解決済み] ORA-011033 を解決する方法。ORACLE の初期化またはシャットダウンが進行中です。
-
[解決済み】既存テーブルへの外部キー追加
-
[解決済み】非常に大きなデータベースファイルを持つsqliteのパフォーマンス特性は何ですか?[クローズド]。
-
[解決済み】CAPの定理 - 可用性とパーティションの許容性
-
[解決済み】データベースの正規形とは何ですか、またその例を教えてください。[クローズド]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SequelizeでfindOrCreateを使う方法
-
[解決済み] Liquibase ロック - 理由は?
-
[解決済み] どのようにneo4jデータベースをリセット/クリア/削除するには?
-
[解決済み] ORMとODMの違いは何ですか?
-
[解決済み] FactテーブルとDimensionテーブルの違い?
-
[解決済み] バルクロードとは何ですか?
-
[解決済み】Cassandraのパーティションキー、コンポジットキー、クラスタリングキーの違い?
-
[解決済み】CAPの定理 - 可用性とパーティションの許容性
-
[解決済み】Non-Repeatable ReadとPhantom Readの違いは何ですか?
-
[解決済み】GUID / UUIDデータベースキーの利点と欠点