2012-12-14 11 views
18

親テーブルがあります。親テーブルには、それを参照する子テーブルがありません。 これらの子テーブルには、それらを参照する他の子テーブルがあります。等々。制約を落としたり再作成せずにOracleにカスケード削除を実行させる方法

メインの親テーブルから行をすべて削除する必要があります。

の削除/「DELETE CASCADE ON」それらすべてを持っている場所に制約を再作成するには、オプション

それらのすべてを通って行くと、手動で子行を削除するには悪夢ではありません。

他のオプションはありますか?

+0

が有効なオプションですか? – danihp

+0

@danihp、そうではありません。スキーマを変更することはできません –

+0

削除する必要がある行はいくつですか?これは通常のタスクですか? –

答えて

24

これは、制約条件または個別の削除の束です。

テーブル構造を調査して一連の削除ベースを生成する「スマート削除」プロシージャを作成することもできますが、別の削除を書き込むよりも多くの作業や悪夢の可能性があります。そして、あなたはを持っていますが、実際には必ずしもそうとは限らないという制約があります。

DELETEステートメントには、カスケード化するパラメータはありません。

+3

はい、魔法はありません。 – ntalbs

0

私は1つのブランチから他の1つのターゲットにデータをマージして、ソースのものを削除する目的でOracleのアプリケーションを使ってこの種の問題を解決しました。 クライアントPedrusルート(内部キー表現位のR = 111)ペトリュスルート(#1 R = 222)と同じである。この誤差を考慮すると、例えば

を引用

https://sites.google.com/site/keytreechanger/Home https://sites.google.com/site/keytreechanger/Home/screenshots

。 222から111までのデータを移動し、222ブランチを削除します。
KTCは、関連するすべてのデータベーステーブルから賢明な方法で、このケース(および次に解決されるいくつかのケース)に関するすべてのデータを収集します。
アルゴリズムは、必要な場所のみを検索し、使用可能なすべてのキーコンポーネントを使用します。
すべてのデータのバックアップは、監査目的でローカルに維持されます。ローカルリポジトリは、テーブル/フィールド定義の変更に対応するために透過的に展開されます。

パワーユーザーは、テーブル/リレーションツリーを視覚的に検査し、任意のテーブルのデータを表示/印刷/編集し、オプションで推定アクション(カット、カットアンドペースト、または完了)を変更できます。
最後に、KTCは、この特定のケースを解決するための修正コードの挿入、更新、削除を数百行生成します。末尾の適切な順序は、
で、#R = 222のrootTableから終了します。
次に、ユーザーとオンラインでコードを適用します。

状況によっては、フィルタは削除する行以外のすべての行を削除する必要があります。

AFAIK市場に同等のアプリケーションはありません。

関連する問題