データベースのすべての表にCREATED_BY列があります。私はCREATED_BY = 'xyz'列の値で行かれたすべてのテーブルの行を削除します。個別のDELETE問合せを作成するのではなく、このOracleデータベースを実現する簡単な方法があります。oracleのCREATED_BY列と一致するすべての表の行を削除します
答えて
Procedure
が必要です。これは、入力として'xyz'
に取るとcreated_by = 'xyz'
CREATE OR REPLACE PROCEDURE del_row (usrnm VARCHAR2)
AS
TYPE var IS TABLE OF VARCHAR2 (100)
INDEX BY PLS_INTEGER;
v_var var;
v_sql VARCHAR2 (1000);
BEGIN
SELECT tname
BULK COLLECT INTO v_var
FROM col
WHERE cname = 'CREATED_BY';
FOR i IN 1 .. v_var.COUNT
LOOP
v_sql := 'Delete from ' || v_var (i) || ' where CREATED_BY like ''%'||usrnm||'%''';
EXECUTE IMMEDIATE v_sql ;
END LOOP;
COMMIT;
END;
デモを持つすべてのテーブルからすべての行を削除します:
CREATE TABLE testt
(
col1 VARCHAR2 (1),
created_by VARCHAR2 (3)
);
SQL> SELECT * FROM testt;
C CRE
- ---
A XYZ
B XYZ
SQL> EXEC del_row('XYZ');
PL/SQL procedure successfully completed.
SQL> SELECT * FROM testt;
no rows selected
削除クエリで=の代わりに「好き」を使用することはできますか?実際にcreated_by列はxyzで始まる値を持ちますが、最後に「xyz_anyString」のような値があります。xyz_ % ' – user1614862
@ user1614862必要に応じて質問を変更することができます。それは問題ではありません。編集ポストでどのように参照してください – XING
は、それは両方のテーブルからデータを削除します。この
DELETE (SELECT *
FROM tab1
INNER JOIN tab2
ON tab1.id= tab2.id
WHERE tab1.id >= any_value
)
を試してみてください。
2つのテーブルからではなく、データベースに1000個のテーブルがあるので、一般的なクエリでそれをやりたかったのです。 – user1614862
うん..私が投稿したもの。私は2つのテーブルを使用しました。複数のテーブルに参加して、それが機能する場合は削除を試みることができます。 –
それは私が1000テーブルのためにできないものです、そうですか? – user1614862
することができますuser_tab_columns
をループしEXECUTE IMMEDIATE
で、削除を実行します。最終的なコードで適切な例外を使用してください。
SET SERVEROUTPUT ON
BEGIN
FOR t IN (SELECT TABLE_NAME
FROM USER_TAB_COLUMNS
WHERE COLUMN_NAME = 'CREATED_BY')
LOOP
DBMS_OUTPUT.PUT_LINE (
'DELETE FROM ' || t.TABLE_NAME || ' WHERE CREATED_BY = ''xyz''');
EXECUTE IMMEDIATE
'DELETE FROM ' || t.TABLE_NAME || ' WHERE CREATED_BY = ''xyz''';
END LOOP;
END;
'DISTINCT'は余分です。テーブルには同じ名前の列が2つありません。 –
@ThorstenKettner:ありがとう。かわった 。私はおそらく、まずall_tab_columnsを使うことを考えました。 –
- 1. sedと一致する前にすべての行を削除します
- 2. 配列に一致しないデータベース内のすべての行を削除しようとしています
- 3. Emacsは、一致しないすべての行を削除しますか?
- 4. JqGrid:すべての行と列のツールチップを削除します
- 5. 一致する前にすべてのデータを削除する
- 6. regexと一致しないものをすべて削除します
- 7. 一致するすべての単語を削除
- 8. ファイル内の、他のファイルのテキストと一致しないすべての行を削除します。
- 9. リスト内の一致するノードをすべて削除します
- 10. 複数の列が一致する行を削除同じテーブル
- 11. MongoDB:名前が文字列と一致するすべてのコレクションを削除します。
- 12. Excel VBA:コンボボックスの値と一致する場合は行を削除します
- 13. file2の列一致に基づいてfile1の行を削除する方法
- 14. SQL削除行の値が異なる列の値と一致する
- 15. Pythonの正規表現。文字列からすべての一致を削除するには
- 16. 3列に一致する重複を削除します
- 17. SQL ColAが一致してColBが一致する場合はすべてのレコードを削除
- 18. Oracle:式と一致し、式がnullの場合は、その列のすべてのレコードを返します。
- 19. linqを使用して条件に一致するすべてのリスト行を削除する方法は?
- 20. 最初の文字列と一致する行を削除する正規表現ですか?
- 21. パターンの一致するペアの間の行を削除します
- 22. 最初の行に一致するファイルからすべての行を削除するには
- 23. 特定の文字列に一致する配列からすべての要素を削除する
- 24. 同じ列のすべての行に一致するワード
- 25. パターンに一致するすべてのExcel描画レイヤシェイプを削除する
- 26. 最初の一致を削除する
- 27. MySQLの2列の前の行の値と一致するNEXT行の値を削除する方法
- 28. 時間パターンに一致するディレクトリ内のすべてのファイルを削除
- 29. PHPでpタグに一致しないタグをすべて削除します
- 30. VBAを使用して別のワークシートの値と一致しない列のすべての行を削除します。
は、すべてのテーブル名を取得自分で作成し、各テーブルから削除する手順を書いて、「XYZ」 – Darzen
の代わりに、ストアドプロシージャによって作成された行は、私が達成することができますSQL Developerのようないくつかのツールがありますこの? – user1614862
@ user1614862あなたの要件を満たすためにカスタマイズされたツールはありません。手順は良い考えです。どのようにそれを使用することができます下記を参照してください。 – XING