テーブルの列にNULL値が1つしかないことを保証する整合性の制約を作成する必要があります。古典的なUNIQUEは、複数のヌルを検出しないのでうまくいかない... どうすればよいですか?null値の制約固有列を追加する
答えて
CREATE TABLE qwe(
id int
);
CREATE UNIQUE INDEX qwe_idx ON qwe(
CASE WHEN id IS null THEN 'NULL' ELSE to_char(id) END
);
INSERT INTO qwe VALUES(1);
1 row inserted.
INSERT INTO qwe VALUES(1);
Error starting at line : 9 in command -
INSERT INTO qwe VALUES(1)
Error report -
ORA-00001: naruszono więzy unikatowe (TEST.QWE_IDX)
INSERT INTO qwe VALUES(NULL);
1 row inserted.
INSERT INTO qwe VALUES(NULL);
Error starting at line : 9 in command -
INSERT INTO qwe VALUES(NULL)
Error report -
ORA-00001: naruszono więzy unikatowe (TEST.QWE_IDX)
SELECT * FROM qwe;
ID
----------
1
(null)
IDのような列(NUMBERデータ型)で動作します。列がVARCHAR2列の場合、列の有効な値である可能性があるため、文字列 'NULL'との比較は機能しない可能性があります。ただし、小さな変更は機能します。たとえば、列の値の最後にスペースを連結するための一意の制約を作成します。 (これは、Oracleが標準に従ってNULLを処理した場合には機能しませんが、そうではありません) – mathguy
string(varchar2)カラムの@mathguyも非常に簡単です。 NULL THEN 1 END) ' – krokodilko
解決策は不正です.1はVARCHAR2にキャストされ、列の有効な値(文字列 '1')と衝突する可能性があります。私は既に私のコメントの中で正しい解決策(列の有効な値と無効な値の事前知識に依存していない)を1つ説明しました。 – mathguy
- 1. Orbeonフォームデータ固有の制約
- 2. コアデータの一部のフィールドに固有の制約を追加する方法
- 3. CockroachDB列にNOT NULL制約を追加できますか?
- 4. ヌル値を許可する固有の制約
- 5. サブクラスによる固有の制約
- 6. 複数の列に対するDB2固有の制約
- 7. 式を含むOracle固有の制約
- 8. "date_of_birth"列のNULL値を固定するとNULL以外の制約に違反しています
- 9. sqlserverテーブルの列を変更して 'NULLでない'制約を追加する
- 10. 2つの列にわたるMysql固有の制約
- 11. 複数の列にわたるDB2固有の制約
- 12. ドメインリストのGrails固有の制約
- 13. Cloud SpannerテーブルにNOT NULL制約を追加する
- 14. PostgreSQLで1アウトオブ2 NOT NULL制約を追加する
- 15. カラムにNOT NULL制約を追加する
- 16. 固有値の固有ベクトル行列
- 17. コントローラー固有のドキュメントイベントリスナーを追加する
- 18. Django固有の制約を持つモデルフォームを更新する
- 19. 複数の制約を追加する
- 20. プログラムの追加制約は、自動レイアウトの制約を破る
- 21. 行の値に基づいてSQL制約を追加する
- 22. 倍数テーブルの値にSQL制約を追加する方法
- 23. キーマッチング値を返す - 制約を追加する
- 24. 既存のテーブルの列にnotnull制約を追加する
- 25. 既存の列に外部キーの制約を追加する
- 26. 更新の列にチェック制約を追加する方法
- 27. 制約付きのテーブルに列を追加する
- 28. phpMyAdminで制約を追加する
- 29. ナビゲーションバーに制約を追加する
- 30. プログラムで制約を追加する
任意のビジネスロジックやインターフェースがユニークな 'データなし' の値の代わりにヌルを使用してからあなたを防ぐのか? –
問題は試験の練習の制約であるため、設計選択をすることができません。 –