親テーブルがあり、それを参照するドーセン子テーブルがあります。これらの子テーブルには、それらを参照する他の子テーブルがあります。等々。
メインの親テーブルから行をすべて削除する必要があります。
制約を「ON CASCADE DELETE」にするために場所全体にドロップ/再作成することはオプションではありません
それらすべてを調べて、子行を手動で削除するのは悪夢です。
他のオプションはありますか?
DELETEステートメントには、カスケードするためのパラメーターがありません。
そのため、ON CASCADE DELETE
または、適切な順序で一連の個別の削除を実行します。
テーブル構造を調査し、それに基づいて一連の削除を生成する「スマート削除」プロシージャを作成できますが、個別の削除を作成するよりも作業が多く、悪夢になります。そして、あなたはhaveがこれを機能させるための制約を持ちたいと思っていますが、これは実際には必ずしも望ましいことではありません。
Oracleのこの種の問題を、あるブランチから別のブランチ(ターゲット)にデータをマージし、ソースブランチを削除するために意図的に行ったアプリケーションで解決しました。
https://sites.google.com/site/keytreechanger/Homehttps://sites.google.com/site/keytreechanger/Home/screenshots
引用
たとえば、このエラーが発生すると、クライアントPedrus Root(内部キー表現#R = 111)はPetrus Root(#R = 222)と同じになります。 222の下のデータを111に移動してから、222ブランチを削除します。
KTCは、データベースのすべての関連テーブルからこのケース(および解決すべき次のいくつかのケース)に関連するすべてのデータをスマートな方法で収集します。
アルゴリズムは、必要な場所で使用可能なすべてのキーコンポーネントのみを使用して検索します。
すべてのデータのバックアップは、監査目的でローカルに維持されます。ローカルリポジトリは、テーブル/フィールド定義の変更に対応するために透過的に進化します。パワーユーザーは、テーブル/リレーションツリーを視覚的に検査し、任意のテーブルのデータを表示/印刷/編集し、オプションで推定アクション(カット、カットアンドペースト、または完了)を変更できます。
最後に、KTCは、この特定のケースを解決するための修正コードの挿入、更新、削除の数百行を生成します。
rootTableから#R = 222を削除します。
次に、ユーザーにオンラインでコードを適用します。
あなたの状況では、フィルターは削除行以外のすべての行を削除する必要があります。
知る限り、市場には同等のアプリケーションはありません。