[解決済み] Oracleの "not null "制約の名前がわからない場合、どのようにドロップすればよいですか?
質問
あるフィールドに NOT NULL 制約が設定されているデータベースがあり、この制約を削除したいのです。 複雑な要因は、この制約がシステム定義の名前を持っており、その制約の名前が本番サーバー、統合サーバー、およびさまざまな開発者データベースの間で異なっていることです。 私たちの現在のプロセスは、変更スクリプトをチェックインし、自動タスクがターゲットデータベースに対して sqlplus を介して適切なクエリを実行することであり、私は単に sqlplus に直接送信できるようなソリューションを希望します。
私自身のデータベース上で、これをドロップする SQL は次のようになります。
alter table MYTABLE drop constraint SYS_C0044566
をクエリすると、制約が見えるようになります。
all_constraints
ビューにクエリすると制約が表示されます。
select * from all_constraints where table_name = 'MYTABLE'
をどのように扱えばよいのかがわかりません。
SEARCH_CONDITION
's
LONG
のデータ型を削除するか、またはその名前を知った後でも、検索された制約を動的に削除する最善の方法です。
では、名前ではなく、この制約が何であるかに基づいて、この制約を削除できる変更スクリプトを作成するにはどうすればよいでしょうか。
EDITです。 Allan の回答は良いものですが、(Oracle の専門知識がないため)、システムが生成した名前を持つ可能性のあるすべての制約に、その名前を知らなくても制約を削除する方法が関連付けられているということが普遍的に正しいとは限らないのではないかという懸念があります。 論理的に制約を削除するときに、システムで名付けられた制約の名前を知る必要がない方法が常にあるというのは本当でしょうか?
どのように解決するのですか?
alter table MYTABLE modify (MYCOLUMN null);
Oracleでは、Not null制約がカラムに指定されると、自動的に作成されます。 同様に、列が NULL を許可するように変更された場合、それらは自動的に削除されます。
修正された質問の明確化 : この解決策は、"not null" 列に対して作成された制約にのみ適用されます。名前を付けずに列定義で "主キー" またはチェック制約を指定すると、制約(および主キーの場合はインデックス)にはシステムが生成した名前が使用されることになります。このような場合、制約を削除するには、その名前を知っている必要があります。そこで最善のアドバイスは、"not null"以外のすべての制約に必ず名前を指定して、このシナリオを回避することです。 これらの制約の1つを一般的に削除する必要がある場合、おそらくPL/SQLとデータ定義テーブルに頼る必要があるでしょう。
関連
-
[解決済み】Oracleクエリが順序付け後に返す行数を制限するにはどうすればいいですか?
-
[解決済み] OracleのIN句に1000以上の値を入れる方法【重複あり
-
[解決済み] SQL Developerで変数の値を表示する
-
[解決済み] Oracle JDBC ojdbc6 JarをMaven依存にする。
-
[解決済み] DB内の全スキーマをリストアップするためのOracle SQLクエリ
-
[解決済み] Oracle Database 11gのHibernate方言?
-
[解決済み] oracleのDATEとTIMESTAMPの違いについて
-
[解決済み] Oracle SQL DeveloperのSQLワークシートウィンドウでテキストを印刷する
-
[解決済み] OracleでGUIDを生成するには?
-
[解決済み] Oracleデータベースからランダムにレコードを取得する方法は?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Oracleで主キーカラムを取得する方法は?
-
[解決済み] Oracle SQL Developerで変数の置換を回避する方法
-
[解決済み] oracleのsidとデータベース名を確認する
-
[解決済み] OracleのIN句に1000以上の値を入れる方法【重複あり
-
[解決済み] Oracle Database 11g Express Editionを初期インストールした後、新しいデータベースを作成する方法は?
-
[解決済み] 制約名でテーブル名を取得する [重複]。
-
[解決済み] Oracle JDBC ojdbc6 JarをMaven依存にする。
-
[解決済み] DB内の全スキーマをリストアップするためのOracle SQLクエリ
-
[解決済み] Oracle Database 11gのHibernate方言?
-
[解決済み] Oracleデータベースからランダムにレコードを取得する方法は?