[解決済み] ORACLE - プライマリーキーでないキーに NULL 値を挿入することはできません。
2022-02-09 15:21:57
質問
ウェブや様々なフォーラムを検索しましたが、なぜこれがうまくいかないのかがわかりません。私のデータベースは、以下のテーブルで構成されています。
CREATE TABLE CUSTOMER(
custid Number(4),
cfirstname varchar2(30),
csurname varchar2(20) NOT NULL,
billingaddr varchar2(30),
cgender varchar2(1),
CONSTRAINT custpk PRIMARY KEY (custid),
CONSTRAINT genderconst CHECK(cgender in ('M','F','m','f'))
);
CREATE TABLE PRODUCT(
prodid Number(4),
prodname varchar2(30),
currentprice Number(6,2),
CONSTRAINT cprice_chk CHECK(currentprice >= 0 AND currentprice <=5000 ),
CONSTRAINT prodpk PRIMARY KEY (prodid),
CONSTRAINT pricepos CHECK((currentprice >= 0))
);
CREATE TABLE SALESPERSON(
spid Number(4),
spfirstname varchar2(30),
spsurname varchar2(30),
spgender varchar2(1),
CONSTRAINT salespk PRIMARY KEY (spid)
);
CREATE TABLE SHOPORDER(
ordid Number(4),
deliveryaddress varchar2(30),
custid Number(4) NOT NULL,
spid Number(4) NOT NULL,
CONSTRAINT orderpk PRIMARY KEY (ordid),
CONSTRAINT orderfk1 FOREIGN KEY (custid) REFERENCES CUSTOMER(custid),
CONSTRAINT orderfk2 FOREIGN KEY (spid) REFERENCES SALESPERSON(spid)
);
CREATE TABLE ORDERLINE(
qtysold Number(4),
qtydelivered Number(4),
saleprice Number (6,2),
ordid Number(4) NOT NULL,
prodid Number(4) NOT NULL,
CONSTRAINT qty_chk CHECK (qtydelivered >= 0 AND qtydelivered <=99),
CONSTRAINT price_chk CHECK(saleprice >= 0 AND saleprice <=5000 ),
CONSTRAINT linefk1 FOREIGN KEY (ordid) REFERENCES SHOPORDER(ordid),
CONSTRAINT linefk2 FOREIGN KEY (prodid) REFERENCES PRODUCT(prodid)
);
そして、insertステートメントを使って、以下のように挿入しています。
INSERT INTO SHOPORDER(ordid, deliveryaddress, spid)
VALUES (41, NULL, 23);
を使っても、NULLを使っても、エラーが出ます。
ORA-01400: NULL を ("S9710647"."SHOPORDER"."CUSTID") に挿入することができません。
私の問題は、deliveryaddress をプライマリキーとして設定していないこと、外部キーとして設定していないこと、NOT NULL CoNSTRAINTS を含んでいないことです。
何か見落としている要因があるのでしょうか?多くのフォーラムでは、制約に関連する問題を抱えた人々がいます。私は、競合する制約を見ることができません。
乾杯
解決方法は?
列だけ挿入している
ordid
,
deliveryaddress
と
spid
を
SHOPORDER
ということは、他のものはおそらくデフォルトで
NULL
.
しかし、あなたが宣言した
custId
として
NOT NULL
ということで、それは許されない。実はエラーメッセージを見れば、何が不満なのかがわかるのです。
ORA-01400: cannot insert NULL into ("S9710647"."SHOPORDER"."CUSTID");
^^^^^^
明らかに
CUSTID
の列があり、あなたは
知っている
を明示的に設定していないので、デフォルトの値が問題を引き起こしているのでしょう。
この問題を解決するには、そのカラムに特定の値を挿入するか、NULL ではないデフォルト値を指定します。
CUSTOMER
テーブルの
orderfk1
外部キー制約は失敗します。
関連
-
[解決済み】BULK INSERTで「予期せぬファイルの終了」エラーが発生したROWを特定する?
-
[解決済み] SQL Server - 'RETURN'付近の、条件が想定されるコンテキストで指定された、非ブール型の式。
-
[解決済み] ORA-01735: 無効な ALTER TABLE オプション - ヒキガエル
-
[解決済み] varchar 値の変換で int カラムがオーバーフローしました。
-
[解決済み] FROM のサブクエリにはエイリアスが必要です。
-
[解決済み] PostgreSQL - json 型の等値演算子を識別できませんでした。
-
[解決済み] [Solved] Oracle SQL Developerで、指定したテーブルを参照しているテーブルを見つけるにはどうしたらいいですか?
-
[解決済み] 外部キー制約は、サイクルまたは複数のカスケードパスの原因となる可能性がありますか?
-
[解決済み] 制約の有効化に失敗しました。1つ以上の行が非Null、ユニーク、または外部キー制約に違反する値を含んでいます。
-
[解決済み] SQL - 多対多のテーブルの主キー
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】オペランド型の衝突:intはdateと互換性がない + INSERT文はFOREIGN KEY制約と衝突した
-
[解決済み】参照するテーブルにプライマリーキーやキャンディデートキーがない
-
[解決済み】一括読み込みデータ変換エラー(指定されたコードページに対して型の不一致または無効な文字)1行目4列目(年)について)
-
[解決済み】Athena: スケールファクターでリソースを使い果たすクエリ
-
[解決済み] Varchar は Sum 演算子では無効です。
-
[解決済み] DELETE文の競合REFERENCE制約
-
[解決済み] リンクされたサーバーの NULL に対して OLE DB プロバイダー Microsoft.Jet.OLEDB.4.0 のインスタンスを作成できません。
-
[解決済み] 検索エラー ORA-00932: 不整合なデータ型: 期待された DATE は NUMBER になりました。
-
[解決済み] ORA-00997: LONG データタイプの不正使用に対する回避策
-
[解決済み] 1行目4列目(年)の一括読み込みデータ変換エラー(型の不一致または指定したコードページに対して無効な文字)