[解決済み] Oracleのすべてのテーブル制約を無効にする
2023-01-09 18:37:07
質問
Oracle のすべてのテーブル制約を 1 つのコマンドで無効にするにはどうすればよいですか。 これは、1 つのテーブル、テーブルのリスト、またはすべてのテーブルのいずれでもかまいません。
どのように解決するのですか?
一時的なスプールファイルの書き出しは避けた方がよいでしょう。 PL/SQLブロックを使用します。 SQL*Plusから実行するか、このことをパッケージやプロシージャに入れることができます。 USER_TABLESへの結合は、ビュー制約を回避するためにあります。
すべての制約(NOT NULL、主キーなどを含む)を本当に無効にしたいとは思えません。 WHERE句にconstraint_typeを入れることを考えるべきでしょう。
BEGIN
FOR c IN
(SELECT c.owner, c.table_name, c.constraint_name
FROM user_constraints c, user_tables t
WHERE c.table_name = t.table_name
AND c.status = 'ENABLED'
AND NOT (t.iot_type IS NOT NULL AND c.constraint_type = 'P')
ORDER BY c.constraint_type DESC)
LOOP
dbms_utility.exec_ddl_statement('alter table "' || c.owner || '"."' || c.table_name || '" disable constraint ' || c.constraint_name);
END LOOP;
END;
/
外部キー制約で参照する前に、主キー制約を有効にする必要があります。 これは、constraint_typeでORDER BYを使用して行うことができます。 P' = 主キー、'R' = 外部キーです。
BEGIN
FOR c IN
(SELECT c.owner, c.table_name, c.constraint_name
FROM user_constraints c, user_tables t
WHERE c.table_name = t.table_name
AND c.status = 'DISABLED'
ORDER BY c.constraint_type)
LOOP
dbms_utility.exec_ddl_statement('alter table "' || c.owner || '"."' || c.table_name || '" enable constraint ' || c.constraint_name);
END LOOP;
END;
/
関連
-
windows mysql prompt access denied for user ''@'localhost' to database.
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] ...値に挿入する ( SELECT ... FROM ... )
-
[解決済み] ATTACHで開いたSQLiteデータベースファイルのテーブルを一覧表示するにはどうすればよいですか?
-
[解決済み] Oracleの全テーブルのリストを取得しますか?
-
[解決済み] NOT IN vs NOT EXISTS
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
解決策:java.sql.SQLException: ユーザー ''@'localhost'' (パスワード: YES を使用) のアクセスが拒否されました。
-
MHAクラスタエラーサマリーの構築
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] SQL Server - 挿入された行のIDを取得するための最良の方法は?
-
[解決済み] 最初の行への結合方法
-
[解決済み] MySQLでFULL OUTER JOINを行うにはどうすればよいですか?
-
[解決済み] SQL Server の VARCHAR/NVARCHAR 文字列に改行を挿入する方法
-
[解決済み] SQL ServerでGROUP BYを使って文字列を連結する方法とは?
-
[解決済み] Postgres でサブクエリを使用してテーブルの行を更新する
-
[解決済み】制約を一時的にオフにする(MS SQL)